使用password_hash和password_verify

时间:2015-03-09 06:14:34

标签: php

在我的登录PHP文件中,我有这些

$passwordInput = password_hash($passInput, PASSWORD_BCRYPT);
$passwordVerify = password_verify($userInput, $passwordInput);

在我的Register PHP文件中,我有这个。

$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);

现在,基本上我是这样做的,它会哈希密码并在注册时将自身插入数据库。它做了什么。

然而,它无法验证它。两个结果都给出了两个不同的哈希,我不知道我可能做错了什么。我也试过让它再次哈希输入并检查数据库中的password_hash但是没有用。

使用这些的正确方法是什么?

(另外,$ passSign和$ userInput是输入字段,它确实获得了用户名/密码)

1 个答案:

答案 0 :(得分:8)

在注册时,您将从用户输入中获取密码,并使用password_hash()生成其密码:

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

您可以在第三个参数中提供要使用的自定义salt,但文档recommends不能执行此操作:

  

注意强烈建议您不要为此功能生成自己的盐。如果您没有指定安全盐,它将自动为您创建安全盐。

您将此哈希保存在数据库中。请务必将其放在CHARVARCHAR字符或更长的字段中。

当用户想要登录时,检查他们输入的密码是否使用password_verify()先前保存的哈希:

60

当然,您从数据库中获取正确的$auth = password_verify($_POST['password'], $hash); 值,并按提供的用户名进行搜索。

如果$hash$auth,则提供的密码与其在注册时计算的哈希值相匹配,并且用户已通过身份验证。

相关问题