PHP - password_verify问题

时间:2013-11-10 15:13:24

标签: php mysql hash php-password-hash

我已经摸不着头脑了2个多小时。我研究过有关stackoverflow的文章,包括:

我无法纠正我的问题。我会很感激我有多少白痴的指导:

将数据插入MySQL数据库的功能:

function insertUser($userObj) {
    $query = $this->databaseConnection->getStntPrepare()->prepare(
            "INSERT INTO user(username, userpassword) VALUES (?,?);");
    $username = $userObj->getUsername();
    $password = password_hash('testing1234', PASSWORD_BCRYPT);

    $query->bind_param('ss', $username, $password);
}

通过从MySQL检索数据来验证用户登录:

function findUser($userObj) {
    $query = $this->databaseConnection->getStntPrepare()->prepare(
            "SELECT userid, userpassword 
                FROM user 
                WHERE username=?");

    $pass = 'testing1234'
    $query->bind_param('s', $userObj->getUsername());
    $query->execute();
    $query->bind_result($userid, $hash);

    while ($query->fetch()) {

        if (password_verify($pass, $hash)) {
            echo 'Password is valid!';
        } else {
            echo 'Invalid password.';
        }
    }
}

运行时,我会收到'密码无效'。

当我在不插入数据库的情况下执行以下操作然后检索:

$hash = password_hash('testing1234', PASSWORD_BCRYPT);
if (password_verify('testing1234', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

我得到'密码有效!'

我认为我的问题与单引号和双引号以及密码字段中的美元符号($)的解释有关,当存储/从MySQL检索时,作为变量而不是文字(如文章建议的那样)数据库 - 但我没有任何运气解决。下面是'testing1234'的哈希值:

$ 2Y $ 10 $ 1 / oQEuYX67n.U3usxH.7tenNq7hT2dKyBSIZsy5xR3W

1 个答案:

答案 0 :(得分:2)

问题出现在数据库中 - 与password_verify或password_hash无关。数据类型具有最大字符数(仅在我创建表时由MySQL创建的字符数定义为40)。已移至60,不再有问题。