2013-08-23 65 views
2

这让我发疯,我的md5不同意。我有这个字符串:不同意同一个字符串的md5哈希,例如

组合生成器是一个工具,让您可以轻松地通过选择相关属性创建 一系列的组合。对于 示例,如果您销售三种不同尺寸的T恤和两种不同颜色的T恤,则生成器将为您创建六种组合。

当我散列它使用MD5函数(PHP 5.5.0)在我的电脑上它产生以下散列:422f3f656e1a5f95e8b5cf7565d815b5

http://www.miraclesalad.com/webtools/md5.php同意我的电脑的结果。

http://www.md5.cz/不同意我的电脑和奇迹。

该字符串/ md5对最初是由另一台计算机计算出来的,它也给出了与md5.cz相同的结果。

我读到编码的问题(虽然字符串中不包含任何非ASCII字符),所以我想在我的电脑下面的代码:

<?php 

$str = "The Combinations Generator is a tool that allows you to easily create a series of combinations by selecting the related attributes. For example, if you're selling t-shirts in three different sizes and two different colors, the generator will create six combinations for you."; 

echo "$str<BR/>"; 
echo md5($str)."<BR/>"; 
echo md5(utf8_encode($str))."<BR/>"; 
echo md5(utf8_decode($str))."<BR/>"; 


die(); 

输出是:

组合生成器是一个工具,通过选择相关属性,您可以轻松创建一系列组合。对于 示例,如果您销售三种不同尺寸的T恤和两种不同颜色的T恤,则生成器将为您创建六种组合。

422f3f656e1a5f95e8b5cf7565d815b5

422f3f656e1a5f95e8b5cf7565d815b5

422f3f656e1a5f95e8b5cf7565d815b5

所以它不是关于UTF8。

任何想法发生了什么?

+0

这两页的输入有区别。一个是单行,另一个是文本块。一个字符'a'散列相同。这种差异可能是由于某些空白区别,例如换行符。您在OP中提供的输入已格式化为SO,因此我们无法确切知道您在做什么... –

回答

5

我最好的猜测是它与'你'这个词中的'标记'和字符编码有关。如果您删除该报价,则两个网站都会报告相同的md5。

+0

什么?那就对了。这有点令人震惊。也许其中一个网站正在逃避错误。 – vroomfondel

+0

任何想法如何解决它?在我的机器上,我的意思是,我不在乎这两个网站是否不同意。我需要获得相同的结果md5.cz – djfm

+2

我傻,http://www.md5.cz/逃逸单引号!就那么简单。 – djfm

-1

md5是md5。这里的所有都是它的。如果你从不同的(非bug)实现中获得不同的哈希值,那么你正在输入不同的输入。请记住,如果输入数据略有不同,md5将被设计为产生大量不同的输出。一个测试字符串末尾的单个空白字符(制表符,换行符等)会完全垃圾你的预期散列,因为你已经输入了不同的输入。

0

我试着向上面提到的字符串递增地添加到您在问题中链接到的两个站点,结果发现,在md5.cz中打破生成器的字符是撇号,如果您销售的是T恤衫。

如果你把它输送到一个散列器,可能保留字符串的使用独特的东西一样进行urlencode(前剥离的特殊字符的字符串),你应该得到的任何字符串匹配的哈希值。

0

中的字符串必须完全一致,包括空格。 可能这些网站正在使用trim()或stripslashes()等转换。 只有字符串是精确的,md5才会返回相同的值。