我在这里写的方法是否足够安全,可以在我的数据库中存储密码?我不确定我是否正确实施了辣椒,显然盐会存储在数据库中。
$userPassword = "password";
$pepper = "81521500905970edf70e3017.50852645";
$pepperedPassword = hash_hmac('sha512', $password, $pepper);
$salt = uniqid(random_int(1000000000,9999999999), true);
$options = [
'cost' => 12,
'salt' => $salt,
];
$hash = password_hash($pepperedPassword, PASSWORD_DEFAULT, $options);
if (password_verify($userPassword, $hash)) {
// Login successful.
echo "Salt:" . $salt . "<BR>";
echo "Pepper: " . $pepper . "<BR>";
echo "Peppered password: " . $pepperedpassword . "<BR>";
echo "Password Hash: " . $hash;
}
答案 0 :(得分:1)
不,您没有按照文档的建议使用password_hash
。请参阅http://php.net/password_hash上的大红框 - 设置手动盐的功能将在未来版本中消失,因为您不应该这样做。
警告自PHP 7.0.0起,不推荐使用salt选项。现在最好只使用默认生成的盐。