2015-11-12 4 views
2

Я пытаюсь использовать функцию 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 
+2

Понятно, что вы читали в журнале изменений, что опция соля была полностью устарела в PHP7 - так что лучше всего использовать соль, которая создается автоматически: http://php.net/manual/en/migration70.deprecated.php (в нижней части страницы) – CD001

+0

Вариант 3 - это плохо. SHA-512 без KDF, такого как bcrypt, слишком быстро. Злоумышленник, получающий доступ к хэшам, может быстро запустить их с помощью атаки на угадывание пароля. Статья не соответствует этому. – SilverlightFox

ответ

6

Действительно короткий ответ на этот вопрос заключается в использовании password_hash() с солью по умолчанию (ваш первый вариант), пользовательские соли осуждаются в PHP7, потому что, к цитате php.net:

опция соли для функции password_hash() является устаревшим для предотвращения разработчиков от создания своей собственной (обычно небезопасной) соли. Сама по себе функция генерирует криптографически безопасную соль, когда разработчик не дает соли, поэтому обычная генерация соли не требуется.

К тому же, ваш третий вариант, hash() следует избегать, так как вам нужно будет создать свою соль.

Смежные вопросы