我想将Ruby程序生成的MD5哈希传递给PHP程序,并发现一些奇怪的东西。
Digest::MD5.hexdigest 'test str1&test str2&test str3&test str4'
你可以看到结果不同......但是如果我删除"&"在我的字符串中:
Digest::MD5.hexdigest 'test str1test str2test str3test str4'
他们是一样的。为什么会这样? MD5算法应该在任何语言中都相同,不应该吗?
答案 0 :(得分:4)
该网站的结果是错误的。
这是一个例子(在命令行中使用PHP):
php -r 'echo md5("test str1&test str2&test str3&test str4");'
输出:
ad0efdf609e99ec50d9333dc0bd1c11a
答案 1 :(得分:2)
804160119894a4cc8c376fffbcc21e1c
是test 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
。