PHP-`password_verify`调用返回false以获取正确的密码

我有以下代码片段:

// bcrypt hash of 'password'
$hash = '$2y$10$4u0cQ.WEnwHDo.C5Nl1vm.shKA0beQ32wqzphSfzklAq9OcDM2nLu';
if(password_verify('password', $hash)) {
    print_r('woohoo!');
}
else {
    print_r('fubar');
}

在一台服务器上,它工作正常(woohoo!),在另一台服务器上,它无法工作. I’ve just put it up on codepad.org,它也在那里失败.

问题是(可以在该键盘页面上看到)由crypt计算的哈希长度为1​​3,而不是所需的60.

我在github上使用ircmaxel’s password_compat library来实现仅PHP 5.5的password_verify函数.

解决方法:

似乎您正在小于5.3.7的PHP版本上运行脚本,因此算法’2y’尚不为人所知.

如果可能,我会考虑在此服务器上进行PHP升级,“ 2y”参数解决了unicode输入字符串的问题.

如果这不是一个选择,则可以替换兼容性包中的算法.关于49号线的某个地方,您会发现…

$hash_format = sprintf("$2y$%02d$", $cost);

…将其更改为以前的BCrypt常量’2a’…

$hash_format = sprintf("$2a$%02d$", $cost);

…这当然不是最佳选择,但这是您在较早版本上可以做到的最好.

现在,新生成的密码哈希将从“ $2a $10 $…”开始,并且使用此哈希值进行的验证应在每个系统上均有效.

上一篇:rem的使用和自适应布局


下一篇:HDC2021技术分论坛:ArkUI 3.0让多设备开发更简单!