0
我想验证我的存储哈希密码与用户输入插入。在哈希验证错误在PHP
说什么理论......
约password_hash机制读取后password_verify,我意识到,在理论上,所插入的字符串会被用哈希相比,至少在我的情况下,存储在站点数据库中。
发生了什么事,我...
注册我的用户password_hash,然后验证我用password_verify登录。如果我很好,代码是正确的,这个函数应该用存储的散列验证用户的输入(即使它是纯文本(?))。
让我们来看看代码:
注册代码:
$passwordHash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));
注:有更多的代码,但我想这是最重要的一部分,所以我决定只这部分粘贴。
登录代码:
<?php
//controller!
require "../model/backend.php";
$username = $_POST['user'];
$password = $_POST['password'];
$dbcom = new dbInteraction;
$dbcom->admlog($username, $password);
$dbcom->conclose();
?>
验证码:
$this->username = $username;
$this->password = $password;
//$this->pdo = $pdo;
//$adm = 1;
$myquery = 'SELECT username, password, isadmin FROM users WHERE username = :username';// AND password = :password';
$stmt = $this->pdo->prepare($myquery);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if($user === false){
die('1Incorrect username/password combination!');
} else{
//Compare the passwords.
$dbpass = $user['password'];
echo $dbpass;
echo '<br>bd<br>input<br>';
echo $password;
$validPassword = password_verify($dbpass, $password);
echo '<br>debug <br>';
echo 'pre pass:<br>';
echo $validPassword;
if($validPassword){
//Provide the user with a login session.
$_SESSION['user_id'] = $user['username'];
$_SESSION['logged_in'] = time();
//header('Location: home.php');
exit;
}else{
die('<br>no pass--Incorrect username/password combination!');
}
}
我必须在我的代码中的一些理论基础问题,或者它只是坏编码?我仍然在努力实现。
非常感谢。
主要问题,我用你的代码看到的是你的params用于在'password_verify'似乎是围绕着错误的方式。接下来,它应该是一个纯文本密码,你传递给第一个参数(就像你期望的用户输入一样),作为背后的场景,将散列密码与第二个参数进行比较。 –
我不能相信我把这些参数放在周围...阅读我阅读的内容...谢谢@JonStirling。顺便说一句,它足够安全吗?谢谢。 –
密码API是否足够安全?是的,目前。我建议查看其他密码API函数,特别是[password_needs_rehash](http://php.net/manual/en/function.password-needs-rehash.php)并使用“PASSWORD_DEFAULT”。同时使用这两个参数意味着如果PHP添加更安全的算法,您的哈希可以自动更新以供您存储。 –