我运行这个脚本:
define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
echo sha1(SECRET . 'zcbkeyky' . 'aaa@bbb.com') . "\n";
本地使用PHP 5.3.2(cli)它给了我:3baa47e50394cd2dce236dcbf2f409fdb9010f2a
在具有PHP 5.1.6(cli)的远程计算机上,它提供:d1bcf4ea83e50593d3df19a8455a5f5cd32d63ef
为什么相同的计算方法不同?
答案 0 :(得分:9)
我想问题就在这里:
define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
// ^^-- escape character
\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上尝试过)。
答案 1 :(得分:2)
我能想到的只是每台服务器上文件/字符串的编码?
我的结果是3baa47e50394cd2dce236dcbf2f409fdb9010f2a(本地)