PHP MD5的结果不同

时间:2014-03-05 04:58:30

标签: md5

我试图获得字符串的MD5值

  

测试%40abc.com05a671c66aefea124cc08b76ea6d30bb11.250.55.65MAIDAz3yq007svng4pbhwvtg32mgif3llea7i

从不同的MD5在线转换网站,我得到了不同的结果

http://www.md5.cz/中,它会返回: c4c794a5488a729a715a877111251405

http://www.adamek.biz/md5-generator.php中,它会返回: 658451b9193e198190873d0d4f20df21

有没有人知道他们为什么会得到不同的结果?

3 个答案:

答案 0 :(得分:2)

字符串中的'%'令至少混淆了其中一个网站。当您删除'%'符号时,两个站点都会提供相同的MD5哈希值。网站没有添加“盐”。

我怀疑其中一个网站可能在输入字符串上使用'urldecode'函数。结果是:

string 'Input    : test%40abc.com05a671c66aefea124cc08b76ea6d30bb11.250.55.65MAIDAz3yq007svng4pbhwvtg32mgif3llea7i' (length=102)
string 'urldecode: test@abc.com05a671c66aefea124cc08b76ea6d30bb11.250.55.65MAIDAz3yq007svng4pbhwvtg32mgif3llea7i' (length=104)

网站www.md5.cz返回相同的结果:c4c794a5488a729a715a877111251405

对于上述两个输入字符串,

答案 1 :(得分:0)

其中一个或两个可能使用随机盐,旨在为相同输入的输出添加独特的触感。

答案 2 :(得分:0)

我发现了这个: @和%40具有相同的值,因为@转换为%40。 也许RCF 1738和RCF3986的差异导致了这个问题?

   urlencode函数和rawurlencode主要基于RFC 1738。

     

然而,自2005年以来,用于URI标准的当前RFC是RFC   3986。

     

以下是根据RFC 3986对URL进行编码的功能。

<?php
function myUrlEncode($string) {
    $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25',
     

'%23','%5B','%5D');           $ replacements = array('!','*',“'”,“(”,“)”,“;”,   “:”,“@”,“&amp;”,“=”,“+”,“$”,“,”,“/”,“?”,“%”,“#”,“[”,“ ]“);           return str_replace($ entities,$ replacementments,urlencode($ string));       }       ?&GT;