在我的登录PHP文件中,我有这些
$passwordInput = password_hash($passInput, PASSWORD_BCRYPT);
$passwordVerify = password_verify($userInput, $passwordInput);
在我的Register PHP文件中,我有这个。
$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);
现在,基本上我是这样做的,它会哈希密码并在注册时将自身插入数据库。它做了什么。
然而,它无法验证它。两个结果都给出了两个不同的哈希,我不知道我可能做错了什么。我也试过让它再次哈希输入并检查数据库中的password_hash但是没有用。
使用这些的正确方法是什么?
(另外,$ passSign和$ userInput是输入字段,它确实获得了用户名/密码)
答案 0 :(得分:8)
在注册时,您将从用户输入中获取密码,并使用password_hash()
生成其密码:
$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);
您可以在第三个参数中提供要使用的自定义salt,但文档recommends不能执行此操作:
注意强烈建议您不要为此功能生成自己的盐。如果您没有指定安全盐,它将自动为您创建安全盐。
您将此哈希保存在数据库中。请务必将其放在CHAR
个VARCHAR
字符或更长的字段中。
当用户想要登录时,检查他们输入的密码是否使用password_verify()
先前保存的哈希:
60
当然,您从数据库中获取正确的$auth = password_verify($_POST['password'], $hash);
值,并按提供的用户名进行搜索。
如果$hash
为$auth
,则提供的密码与其在注册时计算的哈希值相匹配,并且用户已通过身份验证。