如何在PHP中验证哈希密码

时间:2017-08-26 05:15:27

标签: php

<?php
$stmt = $conn->prepare("SELECT users_email,users_password FROM `site_users` WHERE  users_email = :users_email");
$stmt->bindParam(':users_email', $_POST["email"]);
$stmt->execute();
$result = $stmt->fetchAll();

if (password_verify('' . $_POST["password"] . '', $result[0]["users_password"]))
    echo 'Valid';
else 
    echo 'Not Valid';

代码总是回应not valid。我的代码有什么问题?

首先,我获取特定电子邮件的Hash_Password,然后使用PHP函数Password_Verify进行验证。

2 个答案:

答案 0 :(得分:0)

password_verify()用于检查密码是否正确哈希。有关此功能的更多信息:password_verify()

您需要确认几件事

  1. 首先,确保您在$result[0]["users_password"]
  2. 中获得价值
  3. 然后尝试使用带有哈希密码的单引号重现它
  4. 最后请发送您的散列数据以便从我们的结尾检查:)

    $data = password_hash('lol',PASSWORD_DEFAULT);
    $pass = 'lol';
    if(password_verify($pass, 
    '$2y$10$kGlXgFHcw.wwF4N.3ZR2suIXzmwyv1AHxEwz14WGN12NM.9ETaexe')){
     echo "done";
    }
    else{
    echo 'not_done';
    }
    

    这是一个有效的例子。使用您发布的数据更改此代码,希望您将获得结果

答案 1 :(得分:0)

我认为你在下面有太多的引号。尝试替换

if (password_verify(''.$_POST["password"].'', $result[0]["users_password"]))

if (password_verify($_POST["password"], $result[0]["users_password"]))

因为$_POST["password"]应该是字符串。如果你不确定它,你也可以这样做

$pwd = "" .$_POST["password"]; //force cast to string
if (password_verify($pwd, $result[0]["users_password"]))
{
    echo 'Valid';
} 
else 
    echo 'Not Valid';
}