PHP MD5输出与C#MD5输出不匹配

时间:2017-09-21 19:17:49

标签: c# php c#-4.0 hash md5

在C#中,我正试图获得密码的哈希值md5,如下所示:

 string sb = textBox2.Text;
            byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes(sb);
            byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
            string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
 var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(sb);
            sb = System.Convert.ToBase64String(plainTextBytes);
在PHP中

我通过使用md5命令获得该值,

echo md5("megusia94");

两种情况下的输入都是一样的, 然而PHP中的输出是:d1e44ad921daadaf8defadcd21c8644a 而在C#中,输出为:bWVndXMpYTk0

我做错了什么?我搜索了这个论坛并尝试过: MD5 hashing does not match in C# and PHP c# md5 and php md5 not match

2 个答案:

答案 0 :(得分:2)

你不是在比较同样的两件事。 您要比较的是ASCII编码输入字符串的base64表示与来自PHP的实际MD5哈希(以HEX表示形式)。

相反看看:

byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes("megusia94");
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
Console.WriteLine(hashedString);

它正确生成哈希d1e44ad921daadaf8defadcd21c8644a,这与您从PHP获得的哈希值相同。

答案 1 :(得分:-1)

PHP md5:

  • 将哈希值作为32个字符的十六进制数返回。

您的C#代码:

  • 返回base64编码的哈希值。