Войти
Люди
Помощь
Donald Trump

Создаем хеш пароля

И так, в данном блоге поговорим о том, как лучше и правильно создавать хеш пароля благодаря стандартным функциям php.
Я час смотрю исходный код всяких cms, движков и прочих скриптов, но даже сейчас в конце 2019 года я до сих пор встречаю, что многие для создания хеширования пароля используют функцию php md5. Даже не смотря на то, что в документации php (php.net) указано:
Внимание
Не рекомендуется использовать эту функцию для обеспечения безопасности хранения паролей ввиду высокой скорости работы данного алгоритма.

Теперь становится ясно, её используют, потому что это быстро. Но это в корне ставит безопасность вашего сайта над пропастью. Так как md5 можно расшифровать вполне так быстро.

Что такое password_hash


password_hash – это функция была добавлена в php 5.5, которая создает хеш пароля используя сильный, необратимый алгоритм хеширования. По сути, такой хеш вы уже не расшифруете. Кстати, её можно использовать вместе с функцией crypt(), что дает ей большое преимущество.

Как использовать


Использовать её довольно просто. Для начала мы напишем не большой скрипт который будет отвечать, например за регистрацию. У каждого скрипт по своему, я написал только ради примера.
  1. <?php
  2. if(isset($_POST['regas'])) {
  3. // Post запрос с паролем
  4. $password = trim(htmlspecialchars($_POST['password']));
  5. // Выше добавьте сам проверки на ошибки
  6. // Тут происходит само хеширование
  7. $passhesh = password_hash($password, PASSWORD_DEFAULT);
  8. // Потом заносим в bd (mysql)
  9. echo 'Спасибо за регистрацию';
  10. }
  11. ?>

Вот и все, мы занесли в базу данных хеш пароля. Кстати, колонку в бд создавайте с параметром 1000 символов. Что бы хеш у вас влез.
Теперь нам надо проверить пользователя при авторизации, правильно ли он заполнил пароль и совпадает введённый пароль с настоящим. Для этого мы воспользуемся аналогичной функцией password_verify, которая проверяет, соответствует ли пароль хешу.
Для этого напишем небольшой скрипт с авторизацией.
  1. <?php
  2. if(isset($_POST['auth'])) {
  3. // Фильтруем
  4. $password = trim(htmlspecialchars($_POST['password']));
  5. // Проверяем
  6. If(password_verify($password, $row['password']) == false){
  7. echo 'пароль не правильный';
  8. }else{
  9. echo 'пароль правильный';
  10. }
  11. }
  12. ?>

Естественно, вы уже сами должны добавить проверку на ввод символов пароля, но суть как работает стандартная функция я показал. По скорости она занимает 0.03 миллисекунды. По этому, это не так катастрофично. Я использую её не только для создания хеша пароля, но и например, для создания токена, так как она идеально для этого подходит.