我使用password_ compatibility作为我的密码_功能,我试图用这个密码保护系统来保护我的用户。
首先,我使用password_hash()
函数将密码的哈希值存储到数据库中,然后,我想我必须在用户登录时使用password_verify()
函数,以便我可以验证如果他(或她)正确输入密码
实际上,我已经陷入了这一步......我想我必须使用 salt 和 hash 才能使用password_verify()
,但是我不确切知道如何使用password_hash()
创建的盐。我已经阅读了the official guide但我在那里找不到任何帮助......
这是我实际使用的代码:
$connection = new PDO(/*My DB details...*/);
$sql = 'INSERT into users(username, password, mail ,sex) VALUES (:username, :password, :mail, :sex)';
$statement = $connection->prepare($sql);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$statement->bindParam(':username', $_POST['username'], PDO::PARAM_STR, 15);
$statement->bindParam(':password', $password, PDO::PARAM_STR, 30);
$statement->bindParam(':mail', $_POST['mail'], PDO::PARAM_STR, 50);
$statement->bindParam(':sex', $_POST['sex'], PDO::PARAM_STR, 10);
$result = $statement->execute();
现在,我并不确切知道我可以为登录系统使用哪些代码...因为我想我必须使用password_verify()
,但我不知道确切知道在哪里以及如何使用它。这实际上是我的登录系统没有密码加密的代码...
$connection = new PDO(/*My connection info...*/);
$sql = 'SELECT * FROM users WHERE username = :username AND password = :password';
$statement = $connection->prepare($sql);
$statement->bindParam(':username', $_POST['username'], PDO::PARAM_STR, 12);
$statement->bindParam(':password', $_POST['password'], PDO::PARAM_STR, 30);
$result = $statement->execute();
if ($result) {
$result = $statement->fetchAll();
if (!empty($result)){
// Other code I have...
}
那么,你建议我现在使用什么?我真的输了......
谢谢!
答案 0 :(得分:1)
要验证密码,您必须检索。意味着你必须选择它,而不是在条件下使用。选择后,可以轻松验证。听起来很合理吗?
对于盐,您根本不需要担心 - 它已经存储了。