2016-02-03 190 views
0

我使用这个哈希密码:https://github.com/ircmaxell/password_compat如何验证密码哈希

$hash = password_hash($pass1, PASSWORD_BCRYPT, array("cost" => 16)); 

if (password_verify($password, $hash)) { 
     /* Valid */ 
    } else { 
     /* Invalid */ 
    } 

它的工作原理。它散列密码。但我不知道如何验证登录页面中的密码。我尝试过食物,但它也不适用于会话。

+0

什么是'$ password'和'$ pass1'? –

+2

从数据库中提取哈希密码,使用'password_verify($ submittedForm,$ fromDatabase)'验证。它可以是'true'或'false'。 – Qirel

+0

加密输入密码并将其与db进行比较。 –

回答

0

我在过去做了它的方式是在下面的步骤:

1)用户提交的用户名/密码组合。 2)我看数据库中是否存在用户名,是否从数据库中提取该用户记录,如果不是,我向用户提供一个通用错误(即错误的用户名/密码组合)

3)然后我使用password_verify函数与提交的密码对连接到他们试图登录的用户的散列密码。

4)如果它的真实,他们已经登录,否则我提出同样的一般错误给用户(错误的用户名/密码组合)

2

你必须把数据库中的哈希

第一步:创建并存储在数据库中的哈希

$hash = password_hash($pass1, PASSWORD_BCRYPT, array("cost" => 16)); 

第二步:登录

$hash = // hash of user from database by unique id 
$password = // string submit by user from login form 

if (password_verify($password, $hash)) { 
    if (password_needs_rehash($hash, PASSWORD_BCRYPT, array("cost" => 16))) { 
     $hash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 16)); 
     /* Store new hash in db */ 
    } 
} else { 
    /* Invalid */ 
} 

希望它会对你有所帮助

+0

我在用户注册时创建并存储了密码的散列。 –

0

基本上你必须将用户放入登录页面的密码进行哈希,并检查数据库中保存的哈希是否等于用户在登录时发送的哈希密码。