不同的php版本上不同的sha1校验和?

bal*_*loo 2 php checksum sha1

我运行这个脚本:

define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
echo sha1(SECRET . 'zcbkeyky' . 'aaa@bbb.com') . "\n";
Run Code Online (Sandbox Code Playgroud)

在本地使用PHP 5.3.2(cli)它给了我:3baa47e50394cd2dce236dcbf2f409fdb9010f2a
在PHP 5.1.6(cli)的远程机器上它给出:d1bcf4ea83e50593d3df19a8455a5f5cd32d63ef

为什么相同的计算不同?

Pis*_*3.0 9

我想问题就在这里:

define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
//                        ^^-- escape character
Run Code Online (Sandbox Code Playgroud)

PHP手册说:

\x[0-9A-Fa-f]{1,2} 与正则表达式匹配的字符序列是十六进制表示法中的字符

在PHP 5.2和5.3之间,显然这被修改为也匹配\X[0-9A-Fa-f]{1,2}(注意开头的大写字母X).在PHP 5.3中运行时,您(在不知不觉中?)字符串中的回车符.

a)用另一个字符替换反斜杠,或b)在定义SECRET时使用单引号,两个版本将返回相同的散列(在5.2.1和5.3.2上尝试).