PHP - 使用bcrypt散列密码

时间:2016-12-11 12:01:30

标签: php bcrypt php-password-hash

我对有效的哈希密码有疑问:

的login.php

$login = $_POST['login'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
if(!empty($login) && !empty($password) && password_verify(??){

我想进行安全登录,我知道我必须用现有的哈希验证输入的密码(存储在数据库中?)。另外我知道bcrypt每次都会产生新的哈希值(因为盐的大小不同等)。

问题在于我不知道如何将此哈希值放入数据库,因为我不想注册新用户,我有静态用户列表(正好两个:管理员和用户)。

我尝试手动复制/粘贴哈希,但它不会像我前面提到的那样工作,每次我运行脚本时都会创建新哈希。

任何人都可以帮我解决如何将bcrypt哈希放入数据库(只有一次)所以我只能检查输入的密码是否与数据库中的密码相同?

我是否需要额外的变量来存储此哈希?

修改

的login.php

<?php
session_start();
include("log.php");
include("pdo.php");
$login = $_POST['login'];
$password = $_POST['password'];

$adminHash = '$2y$10$lxPRtzzPDUZuPlodhU4QquP.IBrGpkjMNplpNgN9S1fEKd64tJ5vm';
$userHash = '$2y$10$Klt345wT66vA.4OAN5PEUeFqvhPQJ4Ua/A4Ylpc1ZcnJZv/hafgSu';

if(!empty($login) && !empty($password) && (password_verify($password, $adminHash) || password_verify($password, $userHash))){
    $query = $pdo->prepare('SELECT * FROM xx WHERE login = ? AND admin = ?');
    $query->execute(array( $login, 1));
    $result = $query->fetchAll();
    if(!empty($result)) {
        $_SESSION['logged_admin'] = 1;
    }
    else {
        $query->execute(array( $login, 0));
        $result = $query->fetchAll();
        if(!empty($result)) {
            $_SESSION['logged_user'] = 1;
        }
        else {
            $_SESSION['logged_error'] = 1;
        }
    }
}
else $_SESSION['logged_error'] = 1;
header("Location:index.php");

?>
它似乎有效,但我不知道它是否是最好/最安全的解决方案 使用更多的密码,我猜想它仍然太复杂了,仍然在寻找最好的选择! 如果我需要更多用户怎么办?现在每个用户都有相同的哈希,而且它很危险,如何让它安全?为每个用户生成哈希并生成数组或哈希值?

1 个答案:

答案 0 :(得分:1)

您首先从数据库中获取具有password_hash()的密码,然后将其与password_verify($ password,$ storedpassword)进行比较,例如:link