我正在构建一个登录系统,我想确保我正在编写写入代码来生成和存储数据库中的密码。 $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)。 –