我使用bcrypt登录问题

时间:2014-08-25 22:52:43

标签: security encryption hash passwords bcrypt

如果这是一个愚蠢的问题,或者如果它在错误的地方,我会提前道歉。这是我第一次来这里。我整天都被困在这一天,似乎无法解决这个问题。我之前从未使用过bcrypt,但我遵循了几个在线教程,并且我能够创建一个正常运行的注册页面。 这是加密代码:

$password = password_hash($password, PASSWORD_DEFAULT)."\n";

注册页面工作正常,密码在数据库中加密。根据我的理解,在登录页面中发生的事情是我们使用Select语句获取用户输入的用户名/电子邮件的哈希密码,然后我们使用password_verify。所以这是我的代码:

$email = $_POST['user_email'];
$password = $_POST['user_password'];


$stmt = $db->prepare("SELECT Password FROM user WHERE Email= :email");
$stmt->execute(array(':email' => $email));
$hash = $stmt->fetchColumn(0);

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

出于某种原因,它仍然一直说"密码无效"。我尝试打印select语句返回的哈希,以确保它是数据库中的那个,它是。我还尝试复制哈希并将其放在password_verify中以尝试找出问题所在,但它仍然无法工作。你有什么想法吗?

谢谢大家:o)

1 个答案:

答案 0 :(得分:2)

当您生成哈希时,请不要使用."\n"向其添加换行符我非常确定您将其保存到数据库中。它在打印时看起来很好,但从未验证过。


工作:

$password = 'test';
$hash = password_hash($password, PASSWORD_DEFAULT);

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

输出:

Password is valid!