我有以下代码片段:
// bcrypt hash of 'password'
$hash = '$2y$10$4u0cQ.WEnwHDo.C5Nl1vm.shKA0beQ32wqzphSfzklAq9OcDM2nLu';
if(password_verify('password', $hash)) {
print_r('woohoo!');
}
else {
print_r('fubar');
}
在一台服务器上工作正常(哇哦!),在另一台服务器上工作不正常。 I've just put it up on codepad.org它也失败了。
问题是(可以在该键盘页面上看到)crypt
计算的哈希长度为13而不是所需的60。
我在github上使用ircmaxel's password_compat library来实现仅PHP {5.5} password_verify
函数。
答案 0 :(得分:2)
您似乎在小于5.3.7的PHP版本上运行脚本,因此尚不知道算法'2y'。
如果可能,我会考虑在这台服务器上进行PHP升级,'2y'参数解决了unicode输入字符串的问题。
如果这不是一个选项,那么您可以替换兼容包中的算法。关于第49行的某处你会发现...
$hash_format = sprintf("$2y$%02d$", $cost);
......将其改为前BC-'s常数'2a'......
$hash_format = sprintf("$2a$%02d$", $cost);
...这当然不是最佳选择,但它是您在早期版本中可以做到的最佳选择。
新生成的密码哈希现在将以'$2a$10$...'
开头,具有此哈希值的验证应该适用于每个系统。