我试图获得字符串的MD5值
测试%40abc.com05a671c66aefea124cc08b76ea6d30bb11.250.55.65MAIDAz3yq007svng4pbhwvtg32mgif3llea7i
从不同的MD5在线转换网站,我得到了不同的结果
在http://www.md5.cz/中,它会返回: c4c794a5488a729a715a877111251405
在http://www.adamek.biz/md5-generator.php中,它会返回: 658451b9193e198190873d0d4f20df21
有没有人知道他们为什么会得到不同的结果?
答案 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;