2011-11-24 49 views
1

我一直在嘗試將MD5哈希集成到我的WP7應用程序,但我注意到,如果我與PHP的MD5結果進行比較,Silverlight MD5實現http://archive.msdn.microsoft.com/SilverlightMD5不會返回相同的哈希值。如果我散列一次,散列值是相等的,但如果我散列多次,最終的散列結果是不同的。有沒有其他人注意到這個或任何想法,爲什麼這可能發生,可能的修復等?循環MD5返回不同的值在PHP和WP7

PHP Code 
$pwd = "pwd"; 
for ($i=0; $i < 2 ; $i++) 
{ 
    $pwd = md5($pwd); 
} 
print $pwd; 

WP7 Code 
String hashpwd = "pwd"; 
for (int i = 0; i < 2; i++) 
     { 
      String hash = hashpwd;    
      hashpwd = MD5Core.GetHashString(hash); 
     } 
MessageBox.Show(hashpwd); 

回答

3

假設MD5的計算是正確的,你應該看看第一次運行的輸出,如果它們完全一樣。例如,如果PHP使用小寫字符a-f,但WP7使用大寫字符A-F,則第二個MD5和將不同。

+0

你對此案提出了一個有效的觀點,我忘記了這一點。 +1。 – DaveRandom

+0

謝謝。在WP7中將我的哈希結果設置爲小寫解決了這個問題! – Itomanpr

4

這將是因爲在WP7中,您正在散列第一個散列的二進制表示,而在PHP中,您正在散列它的ASCII表示。

PHP的md5()函數返回一個ASCII字符串,其中包含以ASCII - 32個字節表示的32個十六進制數字。 WP7版本將(可能)返回16個字節 - 散列的真實二進制表示。

我不知道100%肯定,但如果對此的回答是其他,我會感到驚訝。

說了這麼多,看看the page you linked to上的評論,看起來好像以前有這個MD5實現存在缺陷 - 所以它可能只是一個Silverlight錯誤。