【发布时间】:2013-08-05 16:12:04
【问题描述】:
您好,我正在尝试使用 PHP 中的 password_hash() 对我的密码进行哈希处理。这部分很好,但是无论如何比较哈希都会返回 false。要登录,我检查用户帐户数据库并获取密码哈希,然后将其与输入的密码进行比较。我的代码如下所示:
$password = $_SERVER["PHP_AUTH_PW"];
$hash = $row["password"];
if (password_verify($password, $hash)) {
// CREATE SESSION VARIABLES //
}
else{
header("HTTP/1.1 404 Not Found");
}
如您所见,输入的密码被带入 HTTP 标头。我不认为这会弄乱密码字符串,因为我可以将它直接与数据库中的密码进行比较(没有散列)。有任何想法吗?我已经三次检查了我的 PHP 版本,我可以对密码进行哈希处理,所以不是这样。
【问题讨论】:
-
您是否检查过您提供给
password_verify的参数是否符合您的预期? -
数据库中的密码已经用 password_hash() 函数进行了哈希处理。然后通过输入的用户名和输入的公司 ID 识别和抓取。然后使用 password_verify() 函数将输入的密码与散列密码进行比较。但是它总是返回 false
-
不,我的意思是您是否手动检查并确保
$password和$hash的值是检索到的正确值,无论它们是否验证。 -
是的,只是翻了一番检查,一切都很好
-
我是否必须对输入的密码进行哈希处理并将其与存储在数据库中的哈希密码进行比较?我的理解是,每次你散列一个字符串时,它都会出现不同的结果,因此 password_verify() 函数。
标签: php login passwords basic-authentication