`password_verify`调用返回了正确的密码错误(`password_verify` ca

2019-08-17 04:37发布

我有下面的代码片段:

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

在一台服务器它的正常工作(哇噢!),在另一这是行不通的。 我只是把它挂在codepad.org ,它也失败了那里。

问题是(如可以在该键盘页面上看到的),通过计算的散列crypt是长度13,而不是所要求的60的。

我使用ircmaxel的password_compat库 GitHub上实现PHP 5.5只password_verify功能。

Answer 1:

看来你正在运行一个PHP版本小于5.3.7脚本,因此算法“2Y”尚不得而知。

如果可能的话,我会考虑这样做服务器上的PHP升级,“2Y”参数解决使用Unicode的输入字符串的问题。

如果这不是一个选择,那么你就可以替换兼容包的算法。 某处约49行,你会发现...

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

...将其更改为前者BCrypt常量“2A” ...

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

......这当然不是最佳的,但它是你可以在早期版本做的最好的。

新生成的密码散列现在将开始'$2a$10$...' ,并与该哈希值的验证应在每个系统上运行。



文章来源: `password_verify` call returning false for correct password