[英]PHP - hashing passwords with bcrypt
我對有效的哈希密碼有疑問:
$login = $_POST['login'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
if(!empty($login) && !empty($password) && password_verify(??){
我想進行安全登錄,我知道我必須使用現有的哈希值(存儲在數據庫中)驗證輸入的密碼。 我也知道bcrypt每次都會產生新的哈希值(因為鹽大小不同等)。
問題是我不知道如何將此哈希放入數據庫,因為我不想注冊新用戶,我有靜態的用戶列表(恰好是兩個用戶:admin和user)。
我嘗試手動復制/粘貼哈希,但是如前所述,每次我運行腳本時都會創建新的哈希,因此它無法正常工作。
誰能幫助我如何將bcrypt哈希放入數據庫(僅一次),以便我只能檢查輸入的密碼是否與數據庫中的密碼相同?
我是否需要其他變量來存儲此哈希?
編輯:
<?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.