将2个散列字符串与登录进行比较

时间:2016-04-21 09:00:47

标签: php pdo hash

我想使用以下方法在我的数据库中保存密码:

$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");
                }       
            } 
        }
    }
}

它无效并且没有登录,如何将哈希密码与现有的哈希字符串进行比较?

我是加密方法的新手,我正在为公司构建登录系统,因此我需要构建一个安全的方法。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您不会将散列密码与数据库中存储的aready哈希密码进行比较。 password_verify()使用password_hash()存储在其创建的哈希中的信息来对字符串密码进行哈希处理

所以你的测试应该是这样的

password_verify($_POST['user_pass'],$row['user_pass'])
相关问题