【问题标题】:Why is the same input returning two different MD5 hashes?为什么相同的输入会返回两个不同的 MD5 哈希值?
【发布时间】:2010-05-10 01:03:12
【问题描述】:

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

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

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

但是,当我使用 md5_file() 获取他们的 MD5 时,他们返回两个不同的 MD5。

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

文件只是一个 

为了验证,我使用了这段代码:

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

他们都返回 

那么为什么对它们进行不同的哈希处理呢?

【问题讨论】:

  • 显而易见的答案是因为它们不同。请参阅换行符答案。

标签: php md5


【解决方案1】:

第二个以换行符结尾,第一个没有。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 您也可以运行 echo " " | md5sumecho -n " " | md5sum
    【解决方案3】:

    您可以在其中任何一个文件中包含空格吗?在文本编辑器中打开它们并显示所有字符

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

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

    如果你看到 [我在躲起来!],你就会知道该怎么做 :)

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2018-03-23
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-27
        • 2013-02-08
        相关资源
        最近更新 更多