我想使用以下方法在我的数据库中保存密码:
$insert_pass = password_hash($pass, PASSWORD_BCRYPT);
当用户需要登录时,如果他的密码等于admin,并且作为哈希,管理字符串在数据库中如下:
$2y$10$T5Gbe.VJyXihIJGhRJuP9ep3ydh/okw4rlKS/oe9KH3ho83mpmQ1y
然后当我查询用户是否有正确的凭据时:
$user = $_POST['user_name'];
$pass = $_POST['user_pass'];//From text boxes
$hash = password_hash($pass, PASSWORD_BCRYPT);
if($user == "" || $pass == "")
{
echo $msg = "Please add user name and password";
}
else
{
$sql = "SELECT * FROM login WHERE user_name = :u LIMIT 1";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':u', $user, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll();
if($result)
{
//echo $msg = "user exist";
if(session_status() == PHP_SESSION_NONE)
{
session_start();
foreach($result as $row)
{
if(password_verify($row['user_pass'], $hash))
{
$_SESSION['userid'] = $row['user_id'];
$_SESSION['role'] = $row['user_role'];
header("Location: homepage.php");
}
}
}
}
}
它无效并且没有登录,如何将哈希密码与现有的哈希字符串进行比较?
我是加密方法的新手,我正在为公司构建登录系统,因此我需要构建一个安全的方法。任何帮助表示赞赏。
答案 0 :(得分:1)
您不会将散列密码与数据库中存储的aready哈希密码进行比较。 password_verify()
使用password_hash()
存储在其创建的哈希中的信息来对字符串密码进行哈希处理
所以你的测试应该是这样的
password_verify($_POST['user_pass'],$row['user_pass'])