Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在PHP中验证密码_Php_Hash_Bcrypt_Verify - Fatal编程技术网

无法在PHP中验证密码

无法在PHP中验证密码,php,hash,bcrypt,verify,Php,Hash,Bcrypt,Verify,在这个项目中,我使用BCRYPT对密码进行了哈希处理 登录时,用户通常不会出现任何错误或其他任何情况,但在尝试更改密码时,您当前的密码与数据库中的密码不匹配(当然,我使用password\u verify()来验证这两个密码) 以下是我的代码片段: $option = ['cost' => 12]; $password = password_hash($_currentpassword, PASSWORD_BCRYPT, $option); $selectpasswordsq

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

登录时,用户通常不会出现任何错误或其他任何情况,但在尝试更改密码时,您当前的密码与数据库中的密码不匹配(当然,我使用
password\u verify()
来验证这两个密码)

以下是我的代码片段:

  $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!');
  }
尝试此操作将导致当前密码与密码不匹配的错误


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


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

您不需要在第二行散列
$\u currentpassword
变量


只需将变量传递给
password\u verify
函数,函数本身就可以完成任务。

您不需要在第二行散列
$\u currentpassword
变量


只需将变量传递给
password\u verify
函数,函数本身就可以完成任务。

password\u verify将散列我的
当前密码
,因此确实需要它。为什么你认为它不需要呢?我添加了一个链接来查看我的全部代码,如果你需要
password\u varify
做它需要做的事情,检查它,它不需要从外部散列密码。只需从数据库中传递用户提交的密码和旧密码,就可以了。更多信息:500。。。。。。。为什么?手册建议255是个不错的选择;密码散列永远不会产生超过255的结果。谢谢!就我所关心的效率而言,
varchar(255)
最适合低消耗的spacepassword\u verify将散列我的
当前密码
,因此确实需要它。为什么你认为它不需要呢?我添加了一个链接来查看我的全部代码,如果你需要
password\u varify
做它需要做的事情,检查它,它不需要从外部散列密码。只需从数据库中传递用户提交的密码和旧密码,就可以了。更多信息:500。。。。。。。为什么?手册建议255是个不错的选择;密码散列永远不会产生超过255的结果。谢谢!就我所关心的效率而言,
varchar(255)
对于低消耗空间来说是最好的