базовый курс

ГРУППА КУРСА

Хеширование паролей

Хеширование - это шифрование короткой строки. В результате получается другая строка определённой длины, например 32 символа. Обычно делают хэширование паролей. Способов расшифровки хешированного пароля нет. Возможен только подбор. Поэтому хранение паролей в таком виде безопаснее, чем в обычном.

В PHP есть несколько функций для хэширования строки. Раньше самой распространённой была функция md5(). Но она работает слишком быстро и позволяет достаточно быстро подобрать пароль. Поэтому использовать её нежелательно. Наиболее удобной функцией является password_hash() с алгоритмом хеширования PASSWORD_BCRYPT. Она возвращает строку в зашифрованном виде.

password_hash (пароль, алгоритм, настройки)

Параметры:

пароль - пароль, который хешируется

алгоритм - алгоритм хеширования. Принимает значения: PASSWORD_DEFAULT и PASSWORD_BCRYPT.

настройки - настройки функции. Их менять не рекомендуется

Пример:

+
1
2
<?php
header('Content-type: text/html; charset=utf-8');
3
4
5
$pas_reg = 'Ivan11'; //пароль, указанный при регистрации
$hash = password_hash($pas_reg, PASSWORD_BCRYPT);
echo $hash;

Запустите скрипт и посмотрите, как выглядит хешированная строка.

Когда пользователь авторизуется на сайте и вводит пароль, его нужно сравнить с хэшированной строкой. Для этого есть функция password_verify(). Она возвращает true, если строка совпадает с паролем, зашифрованным функцией password_hash(), и false, если строка не соответствует паролю.

password_verify (пароль, хешированная строка)

Параметры:

пароль - пароль, введённый пользователем

хешированная строка - строка, с которой сравнивается пароль

Добавим в скрипт проверку введённого пароля:

6
7
8
9
10
11
$pas_login = 'Ivan11'; //пароль, введённый при авторизации
$pr = password_verify($pas_login, $hash);
if ($pr)
echo '<br>совпадает';
else
echo '<br>не совпадает';

При хешировании применяется соль. Эта информация не имеет практического значения, потому что функция password_hash() добавляет соль автоматически. Но Вы можете встретить этот термин, и нужно знать, что он означает. Соль - это набор символов, который добавляется к паролю перед хешированием. Она используется потому, что есть возможность расшифровать строку. Это делают с помощью баз данных, которые содержат огромное количество паролей и соответствующих им хешированных строк. Использование соли делает расшифровку сложнее. Расшифрованная строка не совпадает с паролем, потому что она имеет лишние символы. Авторизоваться с помощью расшифрованной строки не получится, она не соответствует паролю.

Всегда нужно использовать хеширование паролей. Хранение паролей в незашифрованном виде делает сайт небезопасным и позволяет злоумышленникам получить доступ к данным пользователей и совершать нежелательные действия с их аккаунтов. Это может испортить репутацию Вашему сайту.