我运行这个脚本:
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
为什么同样的计算结果不同?
最佳答案
我会说问题出在这里:
define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
// ^^-- escape character
PHP manual说:
\x[0-9A-Fa-f]{1,2}
the sequence of characters matching the regular expression is a character in hexadecimal notation
在 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 上试过)。
https://stackoverflow.com/questions/3167124/