【问题标题】:SHA1: different results for PHP and C#SHA1:PHP 和 C# 的不同结果
【发布时间】:2016-08-10 07:39:51
【问题描述】:

我有一个在 C# 中生成哈希的代码:

string hash = GetHash("Ю-41241624.05.1991");

public static string GetHash(string str)
{
    Encoding eu = Encoding.UTF8;
    byte[] data = eu.GetBytes(str);
    SHA1 sha = new SHA1CryptoServiceProvider();
    return Convert.ToBase64String(sha.ComputeHash(data)); 
}

结果是:

G7xY+gb35Lw4HlDnTZP89FU3Khk=

我尝试在 PHP 中获得相同的结果:

$str = mb_convert_encoding("Ю-41241624.05.1991","UTF-8");
$hash = sha1($str,true);       
$base64 = base64_encode($hash);  
echo $base64;

但结果是:

Dg+x7F8lsC/r9O8PNskgJ/MwNgU=

【问题讨论】:

    标签: c# php sha1


    【解决方案1】:

    只要去掉 mb_convert_encoding(),如果字符串已经是 UTF-8,它就会搞砸。 当我运行没有该功能的代码时,我得到了正确的结果:https://eval.in/620412

    【讨论】:

    • 我的问题是我尝试从 Windows 控制台运行 PHP 脚本并从控制台传递“str”。这就是为什么我得到错误的哈希值。当我在脚本中写入字符串时,它会显示正确的结果。
    【解决方案2】:

    您好,您的问题在于“YU”字符。您的 c# 代码看起来不错。当您仅使用此字符调试代码时,您将获得值为 208 174 的字节数组,这实际上是 UTF8 中的 Ю 字符。所以 c# 代码应该可以正常工作,并且 c# 中的 sha1 应该很好。

    你能从 php 中获取仅用于 char Ю 的字节数吗?它也应该是 208174。 如果你删除这个字符,你的哈希字符串应该是相等的。

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 2015-09-15
      • 2013-11-30
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多