Даже в современное время многие до сих пор используют старые способы шифрования , подвергая опасности свои данные, а функция crypt() для некоторых слишком сложна в использовании. Чтобы это исправить, в PHP 5.5 был введён Hash API , о котором мы и поговорим в этом материале.

Hash API - новый подход к шифрованию паролей.

Даже в современное время многие до сих пор используют старые способы шифрования, подвергая опасности свои данные, а функция crypt() для некоторых слишком сложна в использовании. Чтобы это исправить, в PHP 5.5 был введён Hash API, о котором мы и поговорим в этом материале.

Hash API - это просто некий интерфейс, облегчающий использование функции crypt(). Давайте рассмотрим его функции.

password_hash()

Функция password_hash() принимает строку первым параметром и константу вторым.

<?php
  $hash = password_hash("mystring", PASSWORD_DEFAULT);
?>

Если в качестве второго параметра вы укажете PASSWORD_DEFAULT, то на выходе получите хэш из более 60 символов, а если укажете PASSWORD_BCRYPT, то ровно 60 символов.

Hash API сам заботится о соли и стоимости, но если вы хотите указать какие-то свои значения, то сделать это можно так

<?php
  function salt_function() {
   return "mysaltstringfrom22symbols";
 }

  $opt = array('salt' => salt_function(), 'cost' => 11);
  $hash = password_hash("mystring", PASSWORD_DEFAULT, $opt);
?>

Мы создали ассоциативный массив опций, где указали соль, которую возвращает наша функция, и стоимость. В качестве примера я создал простую фунцию, которая возвращает какую-то строку, но, конечно же, у вас код может быть намного сложнее. Главное, чтобы возвращаемая строка была как минимум из 22 символов, иначе будет ошибка. Вторым элементом массива у нас стоимость(cost). По-умолчанию она равна 10, но чем больше данное значение, тем лучше защита, однако не стоит ставить слишком много, т.к. это может существенно понизить скорость работы скрипта. Когда всё готово, данный массив передаётся третим параметров в нашу функцию password_hash().

password_verify()

Если вам нужно проверить исходную строку и хэш, используйте password_verify().

<?php
  if(password_verify("mystring", $hash)) {
   echo "TRUE";
  } else {
   echo "FALSE";
  }
?>

Тут, думаю, объяснять особо нечего. Пойдём дальше.

password_needs_rehash()

Эта функция используется, когда вам нужно обновить параметры соли или стоимости. password_needs_rehash() проверяет, соответствует ли данный хэш заданному алгоритму и опциям. Если нет, то его нужно обновить.

<?php
  if(password_needs_rehash($hash, PASSWORD_DEFAULT, $opt)) {
   $hash = password_hash($pass, PASSWORD_DEFAULT, $opt);
  }
?>

password_get_info()

Эта фунция просто возвращает массив параметров хэширования.

<?php   $arr = password_get_info($hash); ?>

Вернётся ассоциативный массив с такими значениями:

  • algo - константа алгоритма
  • algoName - имя алгоритма
  • options - опции

Итак, на этом всё. Как видите, использовать Hash API очень даже несложно, так что, если у вас версия
PHP 5.5+, то советую использовать именно этот способ шифрования.