2017-02-09 174 views
-1

我已經嘗試過使用MD5在PHP中對哈希字符串進行哈希處理,並且在C#中也是如此,但如果字符串中包含特殊字符,結果會有所不同。有人能解釋我如何得到這個匹配?MD5哈希特殊字符

這是我在C#代碼:

MD5 md5 = new MD5CryptoServiceProvider(); 
//compute hash from the bytes of text 
md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text)); 

//get hash result after compute it 
byte[] result = md5.Hash; 

StringBuilder strBuilder = new StringBuilder(); 
for (int i = 0; i < result.Length; i++) 
{ 
    //change it into 2 hexadecimal digits 
    //for each byte 
    strBuilder.Append(result[i].ToString("x2")); 
} 
return strBuilder.ToString(); 

我的字符串是"Samuel2989&*"爲字符串。

輸出:

PHP:957915b9c9a8fb65e13fe1dc9a8b86d4

C#:f5ee451f7eb4587da00d4aa31ae1c378

+0

很難說明爲什麼它看起來不同於PHP代碼。 – itsme86

+1

對於我來說,md5(「Samuel2989 &*");返回的結果與你的C#代碼一樣 –

+0

PHP也爲我生成了正確的MD5散列 – ceejayoz

回答

0

你可以嘗試用此方法,並告訴我,如果它的工作適合你?

public static string MD5Hash(string input) 
    { 
     System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
     byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); 
     bs = x.ComputeHash(bs); 
     System.Text.StringBuilder s = new System.Text.StringBuilder(); 
     foreach (byte b in bs) 
     { 
      s.Append(b.ToString("x2").ToLower()); 
     } 
     string password = s.ToString(); 
     return password; 
    } 
+0

OP的C#散列對該字符串是正確的,PHP爲它生成相同的散列。 – ceejayoz

+0

我的答覆與PHP方面無關。 @ceejayoz – HGMamaci

+2

@HGMamaci關鍵是,OP的問題是在PHP方面,所以調整C#代碼是毫無意義的。 – itsme86