我测试了PHP的password_verify
,验证不正确。我使用的是centOS和PHP版本5.3.3。我知道5.3.3版本的PHP不提供password_hash
函数,所以我已经使用了https://github.com/ircmaxell/password_compatPHP的BCrypt无法验证密码
但是,当我验证它时总是用不同的密码返回true。我的代码有bug吗?
这里是我的代码:
$password = 'k32AlGOPqvCzoh*Sp(Hdrr26]M=lQb00R&W=hew|-|([(03vp==A8%m?l=eA2^bs_|\qVV3WZ';
$verify_pw = 'k32AlGOPqvCzoh*Sp(Hdrr26]M=lQb00R&W=hew|-|([(03vp==A8%m?l=eA2^bs_|\qVV3WZasdasdasdasdqweqa13123';
$options = array(
'cost' => 15
);
$hash = password_hash($password, PASSWORD_BCRYPT,$options);
var_dump(password_verify($verify_pw ,$hash)); // always true
我不认为你会在password_verify()中发现很多随机数,但如果你真的相信代码中存在错误,那么你就创建一个[SSCCE](http://sscce.org/)来证明你的断言并在[github的兼容包](https://github.com/ircmaxell/password_compat/issues)上发布一个问题,或者关于[bugs.php.net](https://bugs.php)的错误报告.net /) –
但它真的发生在我身上,那是我非常难过的。我知道'password_verify()'应该可以正常工作,但仍然无法弄清楚在我的关卡中会发生什么事情。或者我应该提供更多信息。 –
bcrypt by design * always *给出不同的散列输出,看看[这个sof问题](http://stackoverflow.com/questions/8467819/bcrypt-generates-different-hashes-for-the-same-input)。或者只是尝试[这个加密计算器](https://www.dailycred.com/article/bcrypt-calculator)。但是,我想知道您的不同密码是指不同的纯文本还是传递到bcrypt并吐出不同输出的纯文本 - 请验证。另外,请注意您的哈希中的几个第一个字符,它定义了哈希长度和盐分,[wiki](https://en.wikipedia.org/wiki/Bcrypt)解释了这一点。 –