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