我有以下代码片段:
// 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计算的哈希长度为13,而不是所需的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 $…”开始,并且使用此哈希值进行的验证应在每个系统上均有效.