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

PHP MD5输出与C#MD5输出不匹配,c#,php,c#-4.0,hash,md5,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 = BitC

在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的输出是:D1E44AD921DADAF8DEFADCD21C8644A 而在C#中,输出为:bWVndXMpYTk0

我做错了什么?我搜索了这个论坛并尝试:
你不是在比较同两件事。 您要比较的是ASCII编码输入字符串的base64表示形式与PHP中的实际MD5哈希(十六进制表示形式)之间的差异

相反,看看这个:

byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes("megusia94");
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
Console.WriteLine(hashedString);
它正确地生成哈希值d1e44ad921daadaf8defadcd21c8644a,该哈希值与从PHP获得的哈希值相同。

PHP md5:

  • 以32个字符的十六进制数返回哈希值
您的C#代码:

  • 返回base64编码的哈希

您不应该使用。请使用PHP(
password\u hash()
password\u verify()
)来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u hash()
。在散列之前,没有必要对它们使用或使用任何其他清理机制。这似乎是Fred的副本,我也尝试了解决方案…我在上面发布的可能的副本,与答案中使用的相同,与其他问题中接受的答案相同。谢谢你,这很有效。我对自己的C#技能有点生疏了,试图刷新它。自从我上次用这种语言编写应用程序以来,已经有好几年了。@pokrak94没问题。还请注意GrumpyCrouton的建议,不要在任何安全相关设置中使用此哈希方案;-)这是一个家庭应用程序,我已经有了一个php版本,现在用C#尝试同样的版本。不打算发表它或任何东西-只是为了练习。谢谢