Вход Регистрация
Хэширование паролей с помощью PHP 5.5 Hash API (оценка: 0)
На данный момент использование bcrypt - это лучший способ хэширования паролей, однако множество разработчиков по старинке используют MD5 и SHA1. Многие из них, не применяют технику добавления соли. В PHP 5.5 решили акцентировать внимание разработчиков на алгоритме bcrypt и создали специальный хэш API.

Хэш API состоит из следующих функций:

password_hash() – для генерации хэша пароля.
password_verify() – проверка пароля.
password_needs_rehash() – используется когда нужно перегенерировать хэш.
password_get_info() – возвращает название алгоритма и другую информацию.


password_hash()

Использование функции crypt() у многих вызывает ступор из-за сложности, поэтому вместо неё применяются упрощённые способы создания хэша. К примеру:
  1. $hash = md5($password . $salt);


Функция password_hash() упрощает этот процесс настолько, насколько это возможно. Если вам нужно создать хэш пароля, вызовите эту функцию и запишите значение в базу данных.
  1. $hash = password_hash($passwod, PASSWORD_DEFAULT);


Вот и всё! Первый параметр - это строка представляющая собой пароль; второй - алгоритм, который будет применён.

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

Важно понять, что вам самим не нужно передавать соль или параметр cost (стоимость - количество раундов подготовки ключей). Новый API сделает это за вас. Но если же вы хотите сами задать данные параметры, то можете сделать это следующим образом.
  1. $options = [
  2. 'salt' => custom_function_for_salt(), //напишите свою функцию генерации соли
  3. 'cost' => 12 // по умолчанию равен 10
  4. ];
  5. $hash = password_hash($password, PASSWORD_DEFAULT, $options);


Вот и всё!

password_verify()

Теперь, когда вы знаете как генерировать хэш, давайте посмотрим на то, как осуществлять проверку.

Функция password_verify() принимает пароль в обычном виде и его хэш. В зависимости от результатов проверки, возвращает true или false.
  1. if (password_verify($password, $hash)) {
  2. // Успех!
  3. }
  4. else {
  5. // Провал
  6. }


Заметьте, что соль находится в самом хэше, так что нам не нужно указывать её вручную.

password_needs_rehash()

Что если вам необходимо обновить параметры соли или стоимости? Или изменились настройки хэширования PHP? В этом случае, можете воспользоваться функцией password_needs_rehash() для проверки данного факта.
  1. if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {
  2. // необходимо создать хэш пароля ещё раз
  3. $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
  4. }


Данную операцию можно делать при входе пользователя в систему, ведь только тогда у нас есть доступ к паролю в явном виде.

password_get_info()

password_get_info() возвращает параметры хэширования:

algo – константа с названием алгоритма
algoName – название алгоритма
options – различные настройки
Заключение

Новый API для хэширования паролей очень прост. Это отличная замена функции crypt(). Если вам на сервере доступна версия PHP 5.5, то мы рекомендуем воспользоваться данным API.
Автор: * -=(C)DRU987=- (Dev) / 13.02.2016 в 14:16
Просмотров: 519
ТОП блогов | поиск | все блоги
Онлайн: 1
Реклама