PHP и mySQL. Зачем хранить соль, если crypt() может быть использован для проверки пароля?

Большое количество сообщений, которые я видел, относительно хеширования паролей, говорит что-то вроде:

  1. Используйте уникальную соль для каждого пароля
  2. Хранить соли в БД вместе с хешированным паролем

Смею ли я даже сказать, что это самый распространенный подход, изложенный?

Все это имеет смысл - если вам нужно каждый раз перефразировать входной пароль - но в PHP вы можете использовать crypt проверить пароль, даже не используя соль. Согласно этому посту, это "как это должно быть сделано".

Например:

$pass = 'YoiI8SjPAlFj';
$salt = '$2y$09$959d78f2f983628c711c7d'; 

echo $hashed = crypt($pass, $salt);

// $2y$09$959d78f2f983628c711c7O3YM7Xdl8Gdnh.S0C.ak41wA8RI1/3ga

А потом проверить (используя те же самые переменные)...

if(crypt($pass, $hashed) === $hashed) {
    // Success
}else {
    // Fail
}

Который пройдет, просто отлично.

Если это так, то зачем мне хранить соль с моим паролем? Если пользователь изменит свой пароль, я все равно сгенерирую новую соль. Мне кажется, что соль - это лишняя информация для хранения и просто занимающая память.

Есть ли аргументы за его хранение? Потому что я не могу думать ни о чем.

0 ответов

Другие вопросы по тегам