簡體   English   中英

PHP-使用bcrypt哈希密碼

[英]PHP - hashing passwords with bcrypt

我對有效的哈希密碼有疑問:

login.php

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

我想進行安全登錄,我知道我必須使用現有的哈希值(存儲在數據庫中)驗證輸入的密碼。 我也知道bcrypt每次都會產生新的哈希值(因為鹽大小不同等)。

問題是我不知道如何將此哈希放入數據庫,因為我不想注冊新用戶,我有靜態的用戶列表(恰好是兩個用戶:admin和user)。

我嘗試手動復制/粘貼哈希,但是如前所述,每次我運行腳本時都會創建新的哈希,因此它無法正常工作。

誰能幫助我如何將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");

?>

它似乎正在工作,但我不知道這是否是最好/最安全的解決方案。
我想如果密碼更多,那就太復雜了,仍在尋找最佳選擇!
如果我需要更多用戶怎么辦? 現在每個用戶都具有相同的哈希,但是我很危險,如何使其安全? 為每個用戶生成哈希並創建數組或哈希?

首先從數據庫中獲取具有password_hash()的密碼,然后將其與password_verify($ password,$ storedpassword)進行比較,如下所示: link

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM