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

时间:2010-07-02 15:37:19

标签: php sha1 checksum

我运行这个脚本:

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

为什么相同的计算方法不同?

2 个答案:

答案 0 :(得分:9)

我想问题就在这里:

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

PHP manual说:

  

\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(本地)