【问题标题】:Cannot verify password in PHP无法在 PHP 中验证密码
【发布时间】:2017-02-11 15:44:35
【问题描述】:

在这个项目中,我使用 BCRYPT 对密码进行哈希处理

登录时,用户正常登录没有任何错误或任何错误,但是当尝试更改密码时,您当前的密码与数据库中的密码匹配(当然我' m 使用password_verify() 验证两个密码)

这是我的代码的 sn-p:

  $option = ['cost' => 12];
  $password = password_hash($_currentpassword, PASSWORD_BCRYPT, $option);

  $selectpasswordsql = "SELECT `password` FROM `auth` WHERE username=?";
  $selectpasswordstmt = $conn->prepare($selectpasswordsql);
  $selectpasswordstmt->execute(array($_SESSION['account']['username']));
  $selectpasswordresults = $selectpasswordstmt->fetch(PDO::FETCH_ASSOC);

  $databasepass = $selectpasswordresults['password'];
  $databasepass = trim($databasepass);
  if(password_verify($password,$databasepass)){
    if(empty($passmsgs)){
      $updatepasssql = "UPDATE `auth` SET
        `password`=?
      WHERE username=?
      ";
      $updatepassstmt = $conn->prepare($updatepasssql);
      $updatepassstmt->execute(array($password, $_SESSION['account']['username']));
      if($updatepassstmt){
        array_push($passmsgs, 'Successfully updating your password!');
      } else {
        array_push($passmsgs, 'There was a problem executing your command!');
      }
    }
  } else {
    array_push($passmsgs, 'Your current password is wrong!');
  }

尝试这样做会导致您当前密码与密码不匹配的错误


编辑:是的,我正在使用VARCHAR,最大长度为255

编辑 2:这是我的代码完整副本的 link

【问题讨论】:

    标签: php hash bcrypt verify


    【解决方案1】:

    您不需要在第二行中散列您的 $_currentpassword 变量。

    只需将变量传递给password_verify 函数,函数本身就会完成这项工作。

    【讨论】:

    • password_verify 将散列我的current_password 所以确实需要它。为什么你认为不需要它?
    • 我添加了一个链接来查看我的整个代码,如果需要,请检查它
    • password_varify 做它需要做的事情,它不需要在外部散列密码。只需从数据库传递用户提交的密码和旧密码,它应该可以工作。更多信息:password_varify
    • 500....... 为什么?手册建议 255 是一个不错的选择; password_hash 永远不会产生超过 255 的值。
    • 谢谢!就我关心的效率而言,varchar(255) 是低消耗空间的最佳选择
    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多