【问题标题】:password_verify() not working [duplicate]密码验证()不起作用[重复]
【发布时间】:2015-06-08 18:05:48
【问题描述】:
//index.php
<html>
<head>
<!--utf html5 declareren-->
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="cssreset.css">
</head>
<body>
<form action="login.php" method="POST">
username: <input type="text" name="usernamebox" required> <br>
password: <input type="password" name="passwordboxlogin" required> <br>
<input type="submit" value="Login">   
</form>

<form action="register.php">
    <input type="submit" value="Click here if you want to register">
</form>


</body>
</html>

//login.php

<?php
session_start();

error_reporting(E_ALL);



include ('connect.php');



$username = $_POST['usernamebox'];
$password = $_POST['passwordboxlogin'];
$_SESSION['usernamebox'] = $username;

//$db->query("SELECT * FROM `users` WHERE `username` = '$username'");
//
//$db->query("SELECT * FROM `users` WHERE `password` = '$password'"); 



//nieuw



$hash = "SELECT password FROM users WHERE username= '$username' ";



if (password_verify($password, $hash)) 
{
    echo 'Password is valid!';
    //header("Location: userpage.php");
} 
else 
{
    echo 'Invalid password.';
}






?>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>


</body>
</html>

我是一名 IT 专业的学生,​​但我似乎无法使用这个 password_verify() 函数。

我基本上是在尝试将 mysqli 中的密码哈希与 login.php 中 POST 表单中给出的密码进行比较。密码已正确散列到我的数据库中。

【问题讨论】:

  • 您实际上并没有从数据库中检索密码......您只是创建了一个包含 SQL 查询的字符串,但没有执行它;然后将该字符串与输入的密码进行比较
  • 数据库中的密码是 VARCHAR64...谢谢马克!生病尝试解决它

标签: php hash mysqli passwords


【解决方案1】:

你的功能是错误的。您需要获取一个密码和一个散列密码,然后将两者进行比较。你想要这样的东西:

$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

   if (password_verify('rasmuslerdorf', $hash)) {
      echo 'Password is valid!';
   } else {
      echo 'Invalid password.';
   }

因此,首先您必须查询数据库并获取散列密码,然后进行比较。在您的示例中,您正在对实际查询字符串本身进行哈希处理。

【讨论】:

  • $select = "SELECT password FROM users WHERE username= '$username'"; $resultaat = $db->query($select); if($resultaat->num_rows>0) { while($rij=$resultaat->fetch_assoc()) { if (password_verify($password, $rij['password'])) { echo '密码有效!'; //header("位置:userpage.php"); } else { echo '密码无效。'; } } } 显然上面的代码确实有效......非常感谢!我试图选择上面的所有这些代码并按 ctrl+k(我想成为一个好用户)但它没有用。请解释如何在 cmets 中按 ctrl+K ?如果你想离开;)
  • Mark 实际上首先得到了正确答案,因为我已经在尝试比较 $password = $_POST['passwordboxlogin'];到 $hash (我的意思是包含查询),但你 def 帮助。谢谢你。我也非常感谢您的帮助 MrTechie!
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 2016-08-16
  • 2018-06-10
  • 1970-01-01
  • 2019-05-26
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多