PHP的BCrypt无法验证密码

时间:2015-11-25 07:47:55

标签: php

我测试了未正确验证的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

1 个答案:

答案 0 :(得分:2)

问题不在于您的代码。 Bcrypt的字符串限制为56字节,例如55 Chars

https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node4.html

  

关键参数是一个秘密加密密钥,可以是一个   用户选择的密码最多56个字节(包括终止零   当密钥是ASCII字符串时的字节。)

因此,您的字符串会被截断,这就是为什么password_verify全部返回true,因为截断的字符串是相同的。