PHP密码验证始终返回false

时间:2014-07-14 14:47:36

标签: php

我正在使用PHP的密码散列API在我正在构建的网站上散列和验证我的密码,但每当我尝试验证我的密码时,它总是返回false。

我有一个User类,它在将密码插入数据库之前设置密码:

public function set__password($passwd) {
    self::$password = password_hash($passwd, PASSWORD_BCRYPT, array('cost' => 12));
}

如果用户名和电子邮件是唯一的,则插入新用户行 - 在检查我的数据库时,我的密码似乎是有效的BCRYPT字符串:

$2y$12$lTMEP0wevDEMX0bzStzoyOEzOTIAi3Hyhd3nYjGwzbI

要验证我的密码,请运行以下脚本:

$username = $_POST['username'];
$password = $_POST['password'];

$DB = Database::getInstance();

// Get the stored password hash
$res = $DB->run__query('SELECT password FROM users WHERE username = "' . $username . '"');
$hash = $res[0]['password'];


// Do the passwords match?
if(password_verify($password, $hash)) {
    echo 'success';
} else {
    echo 'failed';
}

$hash与上面引用的字符串有关,但是当我调用password_verify($password, $hash)$password是从输入字段中检索到的纯文本密码时,我总是收到false值

我已多次查阅API手册,无法看到我哪里出错,任何指针都会非常感谢!

此致 亚历克斯。

2 个答案:

答案 0 :(得分:12)

给定的哈希字符串示例有50个字符而不是60个。双重检查数据库 - CHAR(60) - 和var_dump($ hash)。

答案 1 :(得分:-1)

您可能遇到的另一个问题是降低服务器的成本以获取时间。

始终使用password_hash($ pass,PASSWORD_DEFAULT),是最好的方法。