2014-03-05 210 views
0

我試圖得到一個字符串的MD5值PHP 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: [email protected]q007svng4pbhwvtg32mgif3llea7i' (length=104) 

網站www.md5.cz返回相同的結果:c4c794a5488a729a715a877111251405

兩個以上的輸入字符串,

+0

是我注意到它的的「%」的問題,但不知道爲什麼這種賺取差價 – user2070610

+0

編輯答案。 –

0

我發現這一點: @和%40具有相同的值,因爲@被轉換爲%40。 也許RCF 1738和RCF3986差異會導致此問題?

進行urlencode功能和rawurlencode大多是基於RFC 1738

然而,自2005年開始使用URI的標準目前RFC是RFC 3986.

這是根據編碼URL的功能到RFC 3986.

<?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'); $:「,」@「,」&「,」=「,」+「 ,「$」,「,」,「/」,「?」,「%」,「#」,「[」,「]」); return str_replace($ entities,$ replacementments,urlencode($ string)); } ?>