将password_hash生成的两个哈希值与一个密码进行比较

时间:2015-10-05 22:59:39

标签: php cookies hash

所以我在用password_hash()(php 5.5+)进行哈希处理后将用户密码存储在数据库中。 然后使用password_verify()登录时验证用户。但现在我想用cookie存储用户浏览器的密码。我使用password_hash散列相同的密码,但这次散列的第二部分明显不同。 (盐)

因此,两个哈希值(数据库中的一个哈希值和cookie中的哈希值)不相等。我怎么验证他们呢?

2 个答案:

答案 0 :(得分:3)

请勿在客户端存储密码

您要做的是重新创建会话。我建议你只使用一个会话。

如果由于某种原因你不能,那么生成一个随机字符串(使用像random_compat这样的库)。

$token = random_bytes(16);

将字符串存储在数据库中:

INSERT INTO user_to_token (user_id, token) VALUES (?, ?)

但是,存储哈希值,以便在数据库泄漏时,攻击者不会知道原始令牌,因此无法窃取会话。

$query->execute([$userId, hash('sha256', $token)]);

然后,将cookie设置为原始值base64 encoded:

set_cookie("token", base64_encode($token));

现在,验证,解码然后散列:

$token = hash('sha256', base64_decode($cookie));

然后从DB中查找用户ID:

SELECT user_id FROM user_to_token WHERE token = ?

你已经完成了。

答案 1 :(得分:0)

在cookie上存储用户凭证存在高风险。

如果您在数据库中存储哈希密码,那么您只需要传递用户名和密码,然后将从其他文件中哈希并将其与您的数据库匹配。

离。的login.php 发布用户名和密码

usercheck.php md5(密码)并将其检入已经哈希密码的数据库