我有一个字符串,其中包含一些utf-8字符,如“abc艾”,并发现php5 sha1生成与Javascript sha1相比不同的代码,任何人都可以帮我解决这个问题吗?提前致谢.
phpcode:
$str = "abc艾";
$result = sha1($str);
结果是5345129746e444693aa1111c5840e4b57236f002
javascript代码:
var str = "abc艾"
var result = sha1(str)
结果是8a2aa0fed185dcffb922b1c4d67a49105525bd6a
解决方法:
您从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和.