web-dev-qa-db-ja.com

MD5ハッシュはC#とPHP

PHP MD5を使用してC#でも同じ文字列をハッシュしようとしましたが、結果が異なります。誰かがこれを一致させる方法を説明できますか?

私のC#コードは次のようになります

md5 = new MD5CryptoServiceProvider();
            originalBytes = ASCIIEncoding.Default.GetBytes(AuthCode);
            encodedBytes = md5.ComputeHash(originalBytes);

            Guid r = new Guid(encodedBytes);
            string hashString = r.ToString("N");

前もって感謝します

編集:私の文字列は文字列として123です

出力;

PHP:202cb962ac59075b964b07152d234b70

C#:62b92c2059ac5b07964b07152d234b70

26
megazoid

あなたの問題はここにあります:

Guid r = new Guid(encodedBytes);
string hashString = r.ToString("N");

エンコードされたバイトをGuidにロードする理由はわかりませんが、バイトを文字列に戻す正しい方法ではありません。代わりにBitConverterを使用してください。

string testString = "123";
byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes(testString);
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
// hashString == 202cb962ac59075b964b07152d234b70
37
Juliet

Julietのソリューションでは、比較していたPHPハッシュ(Magento 1.xで生成)と同じ結果は得られませんでしたが、 this githubでの実装

                using (var md5 = MD5.Create())
                {
                    result = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(input)))
                        .Replace("-", string.Empty).ToLower();
                }
0
voxoid