我测试了未正确验证的PHP的password_verify
。我使用的是centOS和PHP版本5.3.3。我知道PHP的5.3.3版本没有提供password_hash
函数,所以我使用了https://github.com/ircmaxell/password_compat
但是,当我验证时,始终使用不同的密码返回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
答案 0 :(得分:2)
问题不在于您的代码。 Bcrypt
的字符串限制为56
字节,例如55 Chars
https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node4.html
关键参数是一个秘密加密密钥,可以是一个 用户选择的密码最多56个字节(包括终止零 当密钥是ASCII字符串时的字节。)
因此,您的字符串会被截断,这就是为什么password_verify
全部返回true
,因为截断的字符串是相同的。