因此,我正在學習PHP並正在登錄頁面上工作。我已經想出瞭如何使用SHA256註冊新用戶來散列$ salt + $密碼。我知道像bcrypt這樣的加密方法較慢,但爲了學習目的,我只使用SHA256。我的問題是,使用這種加密後:從數據庫檢索salt + hash進行驗證
function HashPassword($password) {
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$hash = hash("sha256", $salt . $password); column
$final = $salt . $hash;
return $final;
}
使用準備好的語句,什麼是從數據庫中檢索哈希密碼的最好辦法,所以我可以使用這樣的功能驗證呢?
function ValidatePassword($password, $hash_pass) {
$salt = substr($hash_pass, 0, 64);
$trueHash = substr($hash_pass, 64, 64);
$reHash = hash("sha256" , $salt . $password);
return $reHash == $trueHash;
}
是的,我理解這個概念,並感謝你的額外澄清。絆倒我的是我如何訪問我的數據庫中的串聯散列。從用戶密碼中選擇username ='$ username'? – Jukodan 2012-04-27 07:38:59
@Jukodan你可以做一個單一的查詢來檢索salt和散列密碼:'SELECT hashedPW,salt FROM users WHERE username ='$ username''。然後用PHP完成比較。重要的一點是爲每個用戶使用不同的鹽,而不是全球用戶(對另一個答案的評論聽起來像對所有用戶只有一個「鹽」)。 – Sirko 2012-04-27 07:41:40
啊!我一直在想它,主要是因爲當我查詢數據庫並回應我收到「資源ID#2」的結果而不是預期的散列密碼時。目前我正在使用: $ salt = bin2hex(mcrypt_create_iv(32,MCRYPT_DEV_URANDOM)); 爲每個用戶生成一個隨機salt,然後將hash = salt + password存儲在一列中。 – Jukodan 2012-04-27 07:46:18