我有以下代码片段:
// 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.5password_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$...'
并且使用该哈希值进行的验证应该适用于每个系统。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)