PHP md5()和Ruby Digest :: MD5.hexdigest之间的结果不同

时间:2014-04-14 14:09:44

标签: php ruby md5

我想将Ruby程序生成的MD5哈希传递给PHP程序,并发现一些奇怪的东西。

Ruby代码(结果:ad0efdf609e99ec50d9333dc0bd1c11a)

Digest::MD5.hexdigest 'test str1&test str2&test str3&test str4'

PHP代码(结果:804160119894a4cc8c376fffbcc21e1c)

PHP online MD5 generator

你可以看到结果不同......但是如果我删除"&"在我的字符串中:

Ruby代码(结果:45fa91e4c89aa6f3bb501531a5de6bf4)

Digest::MD5.hexdigest 'test str1test str2test str3test str4'

PHP代码(结果:45fa91e4c89aa6f3bb501531a5de6bf4)

PHP online MD5 generator

他们是一样的。为什么会这样? MD5算法应该在任何语言中都相同,不应该吗?

2 个答案:

答案 0 :(得分:4)

该网站的结果是错误的。

这是一个例子(在命令行中使用PHP):

php -r 'echo md5("test str1&test str2&test str3&test str4");'

输出:

ad0efdf609e99ec50d9333dc0bd1c11a

答案 1 :(得分:2)

804160119894a4cc8c376fffbcc21e1ctest str1的MD5哈希,而不是test str1&test str2&test str3&test str4

这个在线生成器在读取时显然会破坏POST数据。根据Firebug,数据已经损坏到服务器,因此问题在于它的客户端表单处理。很容易找到错误:

function sendHttpRequest(w){
    var url = "http://www.md5.cz/getmd5.php";
    var idWhat = document.getElementById('what');
    var params = "what=" + idWhat.value;
                           ^^^^ Pardon???

正确的哈希是ad0efdf609e99ec50d9333dc0bd1c11a