Blowfish password_verify没有完成这项工作

时间:2014-04-30 07:31:23

标签: php

我使用Anthony Ferrara的密码兼容性库,使用河豚搜索我的密码。当我散列它们时它们很好,但是当我尝试验证密码时,执行此操作:

public function Login($username, $postpassword) {

    $stmt = $this->mysqli->prepare("SELECT username, password FROM users WHERE username=? AND password=?");
    $stmt->bind_param('ss', $username, $password);
    $stmt->execute();
    $stmt->bind_result($username, $password);
    $stmt->store_result();
    if($stmt->num_rows == 1) {
        while($stmt->fetch()) {
            if (password_verify($postpassword, $password)) {
                $SESSID = $this->newSession($username);
                $_SESSION['admin_user'] = $username;
                $_SESSION['last_login'] = time();
                header("Location: home.php?SESSID=$SESSID");
                exit();
            }
        }
    }
    else {
        header("Location: index.php?e=false");
        exit();
    }
    $stmt->close();
    $stmt->free_result();
}

它告诉我,我的细节是错误的......是的,我确实定义了$username$password

if(isset($_REQUEST['login'])) {
$username = $_POST['username'];
$postpassword = $_POST['password'];

$users->Login($username, $postpassword);
}

有人看到我犯的错误吗?

1 个答案:

答案 0 :(得分:5)

您正在从数据库中选择用户名与输入的用户名相匹配的用户,密码 哈希 与输入的明文密码相匹配。当然,这永远不会匹配任何东西。您必须仅根据用户名从数据库中选择用户名和密码,然后使用password_verify验证密码。