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