2016-08-02 13 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

あなたはすべての値が**正確** **同じですか?コードを実行しているときに、その行を確認していますか?単一のビットが異なる場合は、異なるハッシュを取得します。 –

+0

この質問を編集したり削除したりしてください。 'Encoding.Default.GetBytes(key + secretKey)'と '$ prec。$ SecretKey'は同じバイトシーケンスではありませんが、それはなぜ誰にとっても便利な理由は不明です。 –

+0

@KennyEvittは、2つのコードがテストした結果と同じ結果をもたらすことを示しています。あなたはそれを試しましたか? – 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

関連する問題