在我的登录PHP文件中,有这些
$passwordInput = password_hash($passInput, PASSWORD_BCRYPT); $passwordVerify = password_verify($userInput, $passwordInput);
在我的PHP注册文件中,有这个。
$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);
现在,从本质上讲,我这样做是为了使它散列密码,并在注册时将其自身插入数据库中。这样做。
但是,它无法验证它。两种结果都给出2个不同的哈希值,我不知道自己可能做错了什么。我还尝试只是使其再次哈希输入,然后检查数据库中的password_hash,但这没有用。
使用这些的正确方法是什么?
(同样,$ passSign和$ userInput是输入字段,它确实获取用户名/密码)
在注册时,您可以从用户输入中获取密码,并使用生成密码password_hash():
password_hash()
$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);
您可以在第三个参数中为其提供自定义盐,以供使用,但是文档建议不要这样做:
注意 强烈建议您不要为此功能生成自己的盐。如果您不指定盐,它将自动为您创建安全盐。
您将此哈希保存在数据库中。确保将其放在 60个字符或更长 的CHAR/ VARCHAR 字段中 。
CHAR
VARCHAR
当用户想要登录时,请使用先前使用password_verify()以下命令保存的哈希值来输入密码:
password_verify()
$auth = password_verify($_POST['password'], $hash);
当然,您可以$hash通过提供的用户名搜索从数据库中获得正确的值。
$hash
如果$auth为,TRUE则提供的密码与在注册时计算出的哈希值匹配,并且对用户进行身份验证。
$auth
TRUE