我运行这个脚本:
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
为什么相同的计算不同?
我想问题就在这里:
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上尝试).