+7(983)178-57-68

Новые горизонты успешного бизнеса!

Главная Посчитать и заказатьОставить заявку Статьи Отзывы Контакты

Хэширование паролей в php 5.5 Функция password_hash()

В данной статье мы расскажем об основах использования нового API для хеширования в PHP. Данный способ хэширования паролей упростит Вам жизнь на столько, на сколько это возможно. Берем наш пароль -> получаем хэш -> записываем в базу. Никаких лишних манипуляций.

• password_hash() — используется для хэширования пароля.
• password_verify() — используется для проверки пароля на соответствие хэшу.
• password_needs_rehash() — используется для проверки необходимости создать новый хэш.
• password_get_info() — возвращает имя алгоритма хеширования и различные параметры, используемые при хэшировании.

<?php
// наш пароль
$pass="123456";
$hash=password_hash($pass, PASSWORD_DEFAULT);
?>
Вот так легко и просто. Первым параметр - строка пароля, который необходимо захэшировать, а второй параметр определяет алгоритм, который должен быть использован для генерирования хэша.

Алгоритм по умолчанию, в настоящее время, BCrypt, но более сильный алгоритм может быть установлен по умолчанию, когда-нибудь в будущем, и, возможно, он будет генерировать большие строки. Если вы используете PASSWORD_DEFAULT, обязательно храните хэш в колонке, размером больше 60 символов. Лучше всего установить размер 255. Также можете использовать PASSWORD_BCRYPT в качестве второго параметра. В этом случае результат всегда будет 60 символов.

Итак, если Вам показалось этого мало, можете использовать свою собственную соль
<?php
$op=[
'salt' => gensalt(), // здесь Ваша функция генерации соли
'cost' => 12
];
$hash=password_hash($pass, PASSWORD_DEFAULT, $op);
?>
Готово.

Теперь проверим вводимый пользователем пароль. Все что нам нужно - это взять хэш пароля из нашей базы и сравнить его с введённым паролем.

<?php
// $hash - это хэш пароля, полученный из базы
if (password_verify($pass, $hash)):
print "Верный пароль!";
else:
print "Неверный пароль :(";
endif;
?>
password_needs_rehash()
Функция password_needs_rehash() проверяет, использует ли хэш пароля конкретный алгоритм, соль и стоимость вычисления.
<?php
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])):
$hash=password_hash($pass, PASSWORD_DEFAULT, ['cost' => 12]);
endif;
?>
Данную операцию можно делать при входе пользователя в систему, ведь только тогда мы получаем доступ к паролю в явном виде.

password_get_info()
Функция password_get_info() принимает хэш и возвращает ассоциативный массив из трех элементов:
• algo — константа, которая идентифицирует конкретный алгоритм
• algoName — название используемого алгоритма
• options — различные опции, используемые при генерации хэша


Остались вопросы? Спрашивайте!


Понравилась статья? Расскажи другим :)

Опубликовано: | Просмотров: 4116