Я пытаюсь использовать функцию password_hash() для шифрования паролей пользователей. Я понимаю, что эта функция генерирует соль по умолчанию, если вы ее не предоставляете, и даже рекомендуется использовать соль по умолчанию вместо вашей собственной. В настоящее время я взвешиваю 3 варианта и не могу решить, с кем идти, поэтому я был бы признателен, если бы вы могли мне помочь.PHP password_hash(), default или custom salt?
1. вариант: password_hash() с солью по умолчанию
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT);
//INSERT $passwordHash INTO DATABASE
2. вариант: password_hash() с пользовательской соли
$options = ['salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)];
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT, $options);
//INSERT $passwordHash INTO DATABASE
3. вариант: не использовать password_hash() вообще
Я основываю это вариант на должность с 2014 года: The definitive guide to form-based website authentication. В принципе, если это более безопасный подход, чем password_hash() Я бы использовать что-то вроде этого:
$salt = uniqid(rand(0, 1000000);
$passwordInput = $_POST['password'];
$password = hash('sha512', $salt . $passwordInput);
//INSERT $password AND $salt INTO DATABASE SEPARATELY
Понятно, что вы читали в журнале изменений, что опция соля была полностью устарела в PHP7 - так что лучше всего использовать соль, которая создается автоматически: http://php.net/manual/en/migration70.deprecated.php (в нижней части страницы) – CD001
Вариант 3 - это плохо. SHA-512 без KDF, такого как bcrypt, слишком быстро. Злоумышленник, получающий доступ к хэшам, может быстро запустить их с помощью атаки на угадывание пароля. Статья не соответствует этому. – SilverlightFox