为什么Javascript sha1和PHP5 sha1为utf-8字符串生成不同的结果?

我有一个字符串,其中包含一些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和.

上一篇:java – Hudson使用什么密码加密?


下一篇:php – Node.js和sha1