如何连接散列密码从注册到登录PHP/MMySQL



我用哈希密码创建了注册表,现在我真的不知道如何获取哈希密码并登录。

注册.php

$hash = password_hash($password, PASSWORD_BCRYPT);
$insert = $con->query("INSERT INTO Client (firstName, lastName, email, password, keyVerification) VALUES 
('$firstName', '$lastName', '$email', '$hash', '$keyVerification')");

登录.php

$email = $con->real_escape_string($_POST['email']);
$password = $con->real_escape_string($_POST['password']);
$hash = password_hash($password, PASSWORD_BCRYPT);
$result = $con->query("SELECT * FROM Client WHERE email = '$email' AND password = '$hash' LIMIT 1");

不幸的是,当我想用注册的电子邮件和密码登录时,这种方式不起作用——我只是收到了错误的密码或电子邮件设置。我相信我在散列密码上犯了错误。我的逻辑哪里失灵了?

无论何时调用password_hash,都会得到一个新的种子,因此即使输入相同,也无法将其输出与以前的输出进行比较。

搜索数据库以查找给定电子邮件地址的哈希密码。

然后使用password_verify将提交的密码与已知哈希进行比较。

if (password_verify($_POST['password'], $hash_from_database)) {

亚洲:

$password = $con->real_escape_string($_POST['password']);
$hash = password_hash($password, PASSWORD_BCRYPT);

不要对密码进行转义以使其适合插入SQL,然后哈希转义的密码。

转义要放入数据库的内容,即哈希密码。

…但首先不要使用real_escape_string。使用占位符。

您应该尝试使用password_verify ( string $password , string $hash ) : bool函数,因为哈希函数每次都会为相同的密码字符串生成新的哈希。

点击此处阅读更多信息:https://www.php.net/manual/en/function.password-verify.php

最新更新