SHA1:PHP和C#的结果不同

时间:2016-08-10 07:39:52

标签: c# php sha1

我有一个代码在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=

2 个答案:

答案 0 :(得分:3)

摆脱mb_convert_encoding(),如果字符串已经是UTF-8,那么它就会搞砸了。 当我运行没有该函数的代码时,我得到了正确的结果:https://eval.in/620412

答案 1 :(得分:0)

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

你能从php获取php的字节数吗?它应该 208 174 。 如果删除此字符,则哈希字符串应相等。