可能重複:
How do you use bcrypt for hashing passwords in PHP?存儲密碼進行用戶登錄
我研究加密和存儲在登錄數據庫的用戶密碼的最佳和最安全的方法。我碰到的一篇文章,Salted Password Hashing - Doing it Right,提供了一個相當複雜的功能,用於加密和檢查密碼。
我明白代碼是如何工作的,但文章中還提到不僅在數據庫中存儲哈希密碼,而且還在鹽中存儲哈希密碼。如何使用給定的代碼去做這件事?例如:
// User registers with username and password; assume they're already validataed
$hash = create_hash($password_entered);
$password_hash = $hash[HASH_PBKDF2_INDEX];
$salt = $hash[HASH_SALT_INDEX];
$PDO = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);
$statement = $PDO->prepare('INSERT INTO users (username, password, user_salt)
VALUES (:username, :password; :user_salt)');
$statement->execute(array(
':username' => $username_entered,
':password' => $password_hash,
':user_salt' => $salt,
));
這似乎是正確的。但是,驗證登錄的時候,我不知道檢查什麼對從登錄表單輸入的密碼。由create_hash()
返回的編譯散列給出了冒號分隔的值列表。我只是不確定該從哪裏下載,或者如果這個源代碼甚至值得使用。
如果你正在尋找最安全的方式。不要自己動手。要麼等到原生密碼API爲PHP 5.5,要麼同時使用[compat lib](https://github.com/ircmaxell/password_compat)。 – PeeHaa
你是不是應該使用文章中的'validate_password'函數?正如你寫的,'create_hash'返回一個字符串,它已經包含了重新創建它所需的一切(算法,迭代,哈希和鹽),所以你只需要存儲該連接字符串。 – Groo
看起來像'create_hash'函數將salt與hash一起嵌入(一種常見做法),因此不需要將salt單獨存儲在用戶記錄中。 –