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

我运行这个脚本:

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/

相关文章:

php - 使用php过滤掉数组中的重复值

ios-simulator - class_getClassMethod 通常返回 nil(似乎只适

objective-c - 如何使用可为空的 int 或 NSInteger 指针?

c# - 使用 Web 应用程序管理定时事件的首选方法是什么?

vim - 如何指定文件的缩进?

.net - 来自非托管代码的 System.AccessViolationException?

iphone - 如何确保浮点值始终是 0.25 的倍数?

delphi - 用Delphi如何获取当前安装的IE版本?

iphone - CFBundleExecutable 错误

python - 获取当前日期作为方法的默认参数