SHA1:PHP 和 C# 的不同结果
SHA1: different results for PHP and C#
我有一个在 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=
您好,您的问题出在“YU”字符上。您的 C# 代码看起来不错。当您仅使用此字符调试代码时,您将得到值为 208 174 的字节数组,这实际上是 UTF8 中的 Ю 字符。所以 c# 代码应该工作正常,来自 c# 的 sha1 应该很好。
你能从 php 中获取仅用于 char Ю 的字节数吗?也应该是 208 和 174。
如果您删除此字符,您的哈希字符串应该相等。
只需删除 mb_convert_encoding(),如果字符串已经是 UTF-8,它会把事情搞砸。
当我 运行 没有该功能的代码时,我得到正确的结果:https://eval.in/620412
我有一个在 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=
您好,您的问题出在“YU”字符上。您的 C# 代码看起来不错。当您仅使用此字符调试代码时,您将得到值为 208 174 的字节数组,这实际上是 UTF8 中的 Ю 字符。所以 c# 代码应该工作正常,来自 c# 的 sha1 应该很好。
你能从 php 中获取仅用于 char Ю 的字节数吗?也应该是 208 和 174。 如果您删除此字符,您的哈希字符串应该相等。
只需删除 mb_convert_encoding(),如果字符串已经是 UTF-8,它会把事情搞砸。 当我 运行 没有该功能的代码时,我得到正确的结果:https://eval.in/620412