4

我有一个包含一些 utf-8 字符的字符串,比如“abc艾”,发现 php5 sha1 与 Javascript sha1 生成不同的代码,谁能帮我解决这个问题?提前致谢。

代码:

$str = "abc艾";
$result = sha1($str);

结果是5345129746e444693aa1111c5840e4b57236f002

javascript代码:

var str = "abc艾"
var result = sha1(str)

结果是8a2aa0fed185dcffb922b1c4d67a49105525bd6a

4

1 回答 1

7

您从 PHP 获得的结果对于编码为 GB18030 ( 61 62 63 B0 AC)的字符串是正确的

您从 CryptoJS 获得的那个对于编码为 UTF-8 ( 61 62 63 E8 89 BE) 的字符串是正确的。

这里没有冲突。您的 PHP 源文件使用不正确的字符串编码保存,因此您得到的结果不具有代表性。

请阅读每个程序员绝对、肯定需要了解的关于使用文本的编码和字符集的知识。简而言之,您所处理的“艾”是一个Unicode字符,而不是“UTF-8 字符”。有多种方式可以由不同的系统表示,并且这些不同的表示具有不同的 SHA1 和。

于 2013-05-26T21:48:51.067 回答