我有一个包含一些utf-8字符的字符串,比如“abc艾”,并发现php5 sha1与Javascript sha1相比生成了不同的代码,任何人都可以帮我解决这个问题吗?提前谢谢。
phpcode:
$str = "abc艾";
$result = sha1($str);
结果为5345129746e444693aa1111c5840e4b57236f002
javascript代码:
var str = "abc艾"
var result = sha1(str)
结果为8a2aa0fed185dcffb922b1c4d67a49105525bd6a
答案 0 :(得分:6)
您从PHP获得的结果对于编码为GB18030的字符串是正确的(61 62 63 B0 AC
)
你从CryptoJS获得的那个对于编码为UTF-8(61 62 63 E8 89 BE
)的字符串是正确的。
这里没有冲突。使用错误的字符串编码保存您的PHP源文件,因此您得到的结果不具代表性。
请阅读What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text。简而言之,您所处理的“艾”是 Unicode 字符,而不是“UTF-8字符”。有多种方式可以由不同的系统表示,这些不同的表示具有不同的SHA1总和。