【问题标题】:PHP MD5 output does not match C# MD5 output [duplicate]PHP MD5 输出与 C# MD5 输出不匹配 [重复]
【发布时间】:2018-03-03 06:15:36
【问题描述】:

在 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

【问题讨论】:

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


【解决方案1】:

你不是在比较相同的两件事。 您正在比较的是 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 中获得的相同。

【讨论】:

  • 感谢您的成功。我对尝试刷新它的 C# 技能有点生疏。距离我上次使用这种语言编写的应用程序已经有好几年了。
  • @pokrak94 没问题。另请注意 GrumpyCrouton 的建议,不要在任何与安全相关的设置中使用此哈希方案;-) 它的缺陷非常大。
  • 这是一个家庭应用程序,我已经有一个 php 版本,现在在 C# 中尝试相同。不会发布它或任何东西 - 只是为了练习。谢谢!
【解决方案2】:

PHP md5:

  • 以 32 个字符的十六进制数字形式返回哈希值。

您的 C# 代码:

  • 返回 base64 编码的哈希值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2010-12-29
    • 2010-11-16
    相关资源
    最近更新 更多