2013-08-05 162 views
1

嗨,我想在PHP中使用password_hash()来散列我的密码。这部分是好的,但比较哈希无论如何都返回false。要登录我检查用户帐户数据库并获取密码哈希,然后把它比作在键入的密码,我的代码如下所示:PHP password_verify总是返回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版本,我可以散列密码,所以不是这样。

+0

你是否检查过你给'password_verify'的参数是你期望它们的? – Flosculus

+0

以及数据库中的密码已经用password_hash()函数进行散列处理。然后通过输入的用户名和输入的公司ID识别并获取。然后将输入的密码与使用password_verify()函数的散列密码进行比较。但它总是返回错误 – Aaron

+0

不,我是说你手动检查并确保'$ password'和'$ hash'的值是检索的正确值,无论它们是否验证。 – Flosculus

回答

2

因此password_verify()函数没有错。在password_hash()函数中增加了一些字符串。我从官方文档复制并粘贴了这个函数:

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n"; 

最后的“\ n”位没有在验证函数中被考虑。这只是因为应对和粘贴,所以一旦我将它移除,就没有问题。希望这有助于他人在未来。