为什么相同的输入返回两个不同的MD5哈希值?

时间:2010-05-10 01:03:12

标签: php md5

好吧,我有两个文件。它们完全相同。

第一个文件是: http://iadsonline.com/servconfig.php

第二个文件是: http://xzerox.info/servconfig.php

然而,当我使用md5_file()来获取他们的MD5时,他们会返回两个不同的MD5。

第一个返回cc7819055cde3194bb3b136bad5cf58d,这是不正确的,第二个返回96a0cec80eb773687ca28840ecc67ca1,这是正确的。

该文件只是 

要验证,我已使用此代码:

$contents = file_get_contents($URL);
echo htmlentities($contents);

他们都返回 

那为什么它会以不同的方式对它们进行扫描呢?

4 个答案:

答案 0 :(得分:7)

第二个以换行符结束,第一个不换行。

答案 1 :(得分:3)

尝试使用curl,我看到第一个是  没有后面的换行符,第二个是  后面的新行。所以他们当然会以不同的方式散列。事实上,即使在命令行(bash提示符):

$ md5 sc.dat 
MD5 (sc.dat) = cc7819055cde3194bb3b136bad5cf58d
$ md5 zz.dat
MD5 (zz.dat) = 96a0cec80eb773687ca28840ecc67ca1

答案 2 :(得分:0)

你能在这两个文件中都有空格吗?在文本编辑器中打开它们,显示所有字符

或者,运行类似这样的东西

echo str_replace(array("\n", "\t", "\r"), '[I AM HIDING!]', file_get_contents($URL));

如果您看到 [我正在躲!] ,您将知道该怎么做:)

答案 3 :(得分:0)

这也发生在我身上。我为存储和检索散列字符串的所有文件设置了相同的编码(utf-8没有BOM):)现在md5()给出了相同的结果:)