我正在構建一個登錄系統,我想確保我正在編寫寫入代碼來生成和存儲數據庫中的密碼。 $options['passwd']
是被用戶選爲密碼的字符串。安全的密碼生成和存儲
這是我的代碼來生成一個散列:
public function createPasswd($options) {
$hash_seed = 'm9238asdasdasdad31d2131231231230132k32ka¡2da12sm2382329';
$password = $options['passwd'];
$date = new DateTime();
$timestamp = $date->getTimestamp();
$rand_number = rand($timestamp,$timestamp + pow(91239193912939123912,3));
$rand = pow($rand_number, 12);
$salt = str_shuffle($rand.$hash_seed);
$hash = crypt($password, $salt);
return $hash;
}//End class createPasswd
我只是存儲在數據庫中的哈希值,然後將其與用戶的密碼,如以下比較:
if ($hash == crypt($password, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
這是足夠強大的?我錯過了一些大問題?
不要使用舊的地穴。不要使用任何算法的單個迭代。不要使用SHA1。不要使用獨特的每用戶隨機鹽;這些都會造成不安全的密碼存儲。請首先閱讀[Thomas Pornin關於如何安全散列密碼的典型答案](https://security.stackexchange.com/a/31846/39623)。 –