PHP-我不明白password_verify的工作原理(PDO)?请解释

前端之家收集整理的这篇文章主要介绍了PHP-我不明白password_verify的工作原理(PDO)?请解释 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这个问题已经在这里有了答案:            >            How to use password_hash                                    7个
>            How do you use bcrypt for hashing passwords in PHP?                                    9个
我得到了这份任务,直到现在,我一直在使用sha1进行安全保护.
上星期五,老师回到了我们身边,告诉我们使用password_hash.
知道这是明天的事,我试图弄清楚它是如何工作的,但不要把我的头缠住.
我发现有很多人在谈论它,但这些都不对我有用:
How to use password_hash Register And Login

目前,正如分配的那样,我仅使用PDO并返回到以前的工作代码(使用sha1)

  1. <?PHP
  2. ob_start();// TEST
  3. include("inc/timer.inc.PHP");//session
  4. require("inc/database.inc.PHP");//connection website
  5. $title='website';
  6. if (isset($_POST['formConnection'])) {
  7. $loginConnection = filter_input(INPUT_POST,'loginConnection',FILTER_SANITIZE_FULL_SPECIAL_CHARS );
  8. // Connection sha1- OLD
  9. $passwordConnection = sha1($_POST['passwordConnection']);
  10. // Connection password_hash
  11. //$hash = $profile['password'];
  12. //$passwordConnection = password_verify($_POST['passwordConnection'],$hash);
  13. if (!empty(($loginConnection) AND !empty($passwordConnection))) {
  14. $connection = $website->prepare("SELECT * FROM members WHERE login = ? AND password= ?");
  15. $connection->execute(array($loginConnection,$passwordConnection));
  16. $userExists = $connection->rowCount(); //Test existence et affectation à la session des valeurs
  17. if ($userExists == 1) {
  18. $profile = $connection->fetch();
  19. $_SESSION['idMember'] = $profile['idMember'];
  20. $_SESSION['login'] = $profile['login'];
  21. $_SESSION['status'] = $profile['status'];
  22. header("Location: member-detail.PHP?idMember=".$_SESSION['idMember']);
  23. } else {
  24. echo "<script>alert(\"Wrong login or password\")</script>";
  25. }
  26. } else {
  27. echo "<script>alert(\"Please check your login or your password\")</script>";
  28. }
  29. }
  30. ?>
  31. <body>
  32. <form method="post" action="">
  33. <div class="form-group">
  34. <label for="loginConnection">login</label><br>
  35. <input type="text" class="form-control" name="loginConnection" id="loginConnection"
  36. placeholder="login" required><br><br>
  37. </div>
  38. <div class="form-group">
  39. <label for="passwordConnection">password</label><br>
  40. <input type="password" class="form-control" name="passwordConnection" id="passwordConnection"
  41. placeholder="Mot de Passe" required><br><br>
  42. </div>
  43. <input type="submit" name="formConnection" value="Se connecter">
  44. <div class="form-group">
  45. <a href="subscribe.PHP">Not subscribed yet?</a>
  46. </div>
  47. </form>
  48. <br><br>
  49. </body>

我知道它应该是布尔值,但我不知道如何使用它.

是否有循序渐进的教程?我可能已经错过了.
谢谢

最佳答案
password_verify()功能将与password_hash()功能结合使用.

您将从password_hash()生成的哈希存储在数据库中.当某人尝试登录时,您可以根据哈希测试他们提供的密码.如果password_verify()返回true,则密码匹配.

您不应该使用password_hash()来重新哈希密码,因为you will get a different answer every time(如果使用随机盐,则应这样做).当您使用password_hash()对密码进行哈希处理时,默认情况下,它将使用随机盐对哈希进行哈希处理.该随机盐被编码为结果哈希字符串,以便password_verify()可以使用与原始哈希相同的盐对其进行验证.

基本上,您应该从数据库中检索尝试登录用户的哈希,并将其提供给password_verify()函数.除了盐之外,哈希还包含有关使用哪个哈希算法的信息.

php.net example

  1. <?PHP
  2. // See the password_hash() example to see where this came from.
  3. $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
  4. if (password_verify('rasmuslerdorf',$hash)) {
  5. echo 'Password is valid!';
  6. } else {
  7. echo 'Invalid password.';
  8. }
  9. ?>

猜你在找的MySQL相关文章