代码之家  ›  专栏  ›  技术社区  ›  Melvin

php password\u verify不起作用[重复]

  •  2
  • Melvin  · 技术社区  · 7 年前

    这应该非常简单:我生成一个散列密码,然后想将其与“未散列”字符串进行比较。它总是返回无效密码。我错过了什么?

    <?php
    
    // MY CURRENT PHP VERSION IS 7.0.9
    
    $password = "abc";
    
    $options = [
        'cost' => 11,
        'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
    ];
    $password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n";
    
    if (password_verify($password, $password_hashed)) {
        echo '<strong>correct password.</strong><br>';
    } else {
        echo '<strong>invalid password!</strong><br>';
    }
    
    
    ?>
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   Qirel    7 年前

    您的问题是在哈希字符串的末尾添加一个换行符。

    $password_hashed = password_hash($password, PASSWORD_BCRYPT, $options)."\n";
    //                                                                       ^
    //                                          Here you add a newline ------'
    

    这意味着对密码进行散列,并在散列后的字符串末尾添加一个换行符。当您现在通过与未剪切的字符串进行比较时 password_verify() ."\n" 从那里你散列密码,使它。。。

    $password_hashed = password_hash($password, PASSWORD_BCRYPT, $options);
    

    最后一点,请参阅手册。

    警告