php中的哈希验证错误


Hash verification error in php

我想用用户插入的输入验证我存储的哈希密码。

理论上说。。。

在阅读了password_hash和password_verify的机制后,我意识到,理论上,插入的字符串将与哈希进行比较,至少在我的情况下,哈希存储在站点数据库中。

发生在我身上的事…

我使用password_hash注册用户,然后使用password_verify验证登录名。如果我很好,并且代码是正确的,那么这个函数应该用存储的哈希验证用户的输入(即使是纯文本(?))。

让我们看看代码:

注册代码:

$passwordHash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));

注意:还有更多的代码,但我想这是最重要的部分,所以我决定只粘贴这部分。

登录代码:

<?php
//controller! 
    require "../model/backend.php";
    $username = $_POST['user'];
    $password = $_POST['password'];
    $dbcom = new dbInteraction;
    $dbcom->admlog($username, $password);
    $dbcom->conclose();
?>

验证码:

$this->username = $username;
        $this->password = $password;
        //$this->pdo = $pdo;
        //$adm = 1;
        $myquery = 'SELECT username, password, isadmin FROM users WHERE username = :username';// AND password = :password'; 
        $stmt = $this->pdo->prepare($myquery);
        $stmt->bindParam(':username', $username, PDO::PARAM_STR);
        $stmt->execute();
        $user = $stmt->fetch(PDO::FETCH_ASSOC);

        if($user === false){
            die('1Incorrect username / password combination!');
        } else{

        //Compare the passwords.
            $dbpass =  $user['password'];
            echo $dbpass;
            echo '<br>bd<br>input<br>';
            echo $password;
            $validPassword = password_verify($dbpass, $password);
            echo '<br>debug <br>';
            echo 'pre pass:<br>';
            echo $validPassword;
            if($validPassword){
                //Provide the user with a login session.
                $_SESSION['user_id'] = $user['username'];
                $_SESSION['logged_in'] = time();

                //header('Location: home.php');
                exit;
            }else{
                die('<br>no pass--Incorrect username / password combination!');
            }
    }

我的代码中是否有一些理论基础问题,或者只是编码不好?我还在努力实现。

非常感谢。

问题出在password_verify参数的顺序上。

它应该像$validPassword = password_verify($password, $dbpass);或者用一般的话来说:$validPassword = password_verify('String to verify', 'Saved password');

特别感谢@JonStirling