2016-08-02 71 views
-1

我想用c#md5和php md5來計算相同的結果,但他們給出了不同的結果。 c#代碼必須與php代碼相同。c#md5和php md5不是馬赫

public string ToMD5(string orderId, string statusCode, string secretKey) 
{ 
    string key = orderId + "+" + statusCode; 
    key = Base64Encode(key); 
    MD5 m = System.Security.Cryptography.MD5.Create(); 
    byte[] h = m.ComputeHash(Encoding.Default.GetBytes(key + secretKey)); 
    string r = ""; 

    foreach (byte b in h) 
    { 
     r += b.ToString("X2"); 
    } 

    return r; 
} 

這裏是PHP代碼:

$key = $orderid."+".$status; 
$prec = base64_encode($key); 
$prec = $prec.$SecretKey; 
$prec = md5($prec); 
echo $prec; 

C#的回報:CEC71705E5A25CCD21609B72053539FC

PHP回報:f1542715b25b302553119fda1e8567bb

感謝您的幫助。

+1

你是100%確定所有的值都是**完全相同嗎?你是否正在運行,逐行檢查代碼以確定它?如果只有一位不同,你會得到不同的散列。 –

+0

請編輯或刪除這個問題,因爲它目前的值非常低。看起來很清楚,'Encoding.Default.GetBytes(key + secretKey)'和'$ prec。$ SecretKey'不是同一個字節序列,但不清楚爲什麼這對任何人都有用。 –

+0

@KennyEvitt這兩個代碼給出了我們測試的相同結果。你測試過了嗎? – safa

回答

2

這些2行產生相同的MD5哈希值:

echo md5("12345+200OKSecret"); 

new List<byte>(MD5.Create().ComputeHash(Encoding.Default.GetBytes("12345+200OKSecret"))).ForEach(x => Console.Write("{0:X2}",x)); 

結果:

8df9a16122b34e41d49ad11d9f1e0c73 

8DF9A16122B34E41D49AD11D9F1E0C73 

檢查您正在哈希的字符串的值 - 它們必須不同。

+0

感謝您的信息。你是對的 。這是我的錯誤.. – safa