Функция pass_hash() используется для создания хеша пароля.
Требования к версии PHP: PHP 5 >= 5.5.0, PHP 7.
строка пароль_хэш (строка $пароль, int $algo [, массив $options])
pass_hash() создает хеш пароля, используя достаточно сильный односторонний алгоритм хеширования. pass_hash() совместим с crypt(). Таким образом, хэши паролей, созданные с помощью crypt(), также можно использовать с pass_hash().
Поддерживаемые на данный момент алгоритмы:
PASSWORD_DEFAULT
— использовать алгоритм bcrypt (по умолчанию в PHP 5.5.0). Обратите внимание, что эта константа будет меняться по мере добавления в PHP новых и более мощных алгоритмов. Следовательно, длина результатов, генерируемых с использованием этой константы, изменится в будущем. Поэтому столбец в базе данных, где хранятся результаты, может превышать 60 символов (предпочтительно 255 символов).
PASSWORD_BCRYPT
— создает хеш с использованием алгоритма CRYPT_BLOWFISH
. В результате получается crypt(), совместимый с «$2y$». Результатом будет строка из 60 символов или FALSE
в случае ошибки.
PASSWORD_ARGON2I
— создает хеш с использованием алгоритма хеширования Argon2.
Опции, поддерживаемые PASSWORD_BCRYPT:
salt(string) — вручную укажите значение соли для хеширования пароля. Это позволит избежать автоматического образования соли.
Если это значение опущено, пароль_hash() автоматически генерирует случайное значение соли для каждого хеша пароля. Этот режим работы является преднамеренным.
Примечание. Опция соли устарела, начиная с PHP 7.0.0. На данный момент лучше просто использовать соль, сгенерированную по умолчанию.
стоимость (целое число) — представляет стоимость, используемую алгоритмом. На странице crypt() приведены примеры значений стоимости.
Если этот параметр опущен, значение по умолчанию равно 10. Эта стоимость является хорошей прибылью, но вы можете увеличить это значение в зависимости от вашего собственного оборудования.
PASSWORD_ARGON2I поддерживаемые параметры:
Memory_cost ( целое число ) — Максимальный объем памяти (единица измерения: байт) при вычислении хеша Argon2. Значение по умолчанию: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( целое число ) — максимальное время, затраченное на вычисление хеша Argon2. Значение по умолчанию: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
threads ( целое число ) — максимальное количество потоков, используемых при вычислении хэшей Argon2. Значение по умолчанию: PASSWORD_ARGON2_DEFAULT_THREADS
.
Описание параметра:
пароль: значение хеш-функции, созданное функцией pass_hash().
algo: константа криптографического алгоритма, используемая для указания алгоритма, используемого при хешировании паролей.
options: ассоциативный массив, содержащий параметры. В настоящее время поддерживаются два параметра: соль, соль (строка помех), добавляемая при хешировании пароля, и стоимость, которая используется для указания количества уровней рекурсии алгоритма. Примеры этих двух значений можно найти на странице crypt().
Если этот параметр опущен, будет использоваться случайное значение соли и стоимость по умолчанию.
Возвращает хешированный пароль или FALSE в случае ошибки.
Результат:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Результат:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Пример установки значения соли вручную
<?php /* * * Обратите внимание, что значение соли здесь генерируется случайным образом. * Никогда не используйте фиксированное значение соли или значение соли, которое не генерируется случайным образом. * * В большинстве случаев вы можете позволить паролю_hash автоматически генерировать для вас случайное значение соли */ $варианты = [ ' стоимость ' => 11 , ' соль ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; пароль_хэш ( " расмуслердорф " , PASSWORD_BCRYPT , $ options ) ;Результат:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
Пример Password_hash() для поиска лучшей стоимости
<?php /* * * В этом примере выполняется эталонный тест на сервере, чтобы проверить, насколько высокую стоимость может выдержать сервер * Максимальное значение может быть установлено без значительного замедления работы сервера * 8-10 — хороший результат, на сервере Если это достаточно быстро, чем выше, тем лучше. * Следующий целевой код составляет ≤ 50 миллисекунд (миллисекунд), * подходит для системы, обрабатывающей интерактивный вход в систему. */ $timeTarget = 0.05 // 50 миллисекунд ( миллисекунд) $стоимость = 8 ; сделать { $ cost ++; $start = microtime ( истина ) ; пароль_хэш ( « тест » , PASSWORD_BCRYPT , [ « стоимость » => $cost ] ) ; $end = microtime ( истина ) ; пока ( ( $end- $ start ) < $ timeTarget ) ; " Найдена соответствующая стоимость: " $ cost ? >Результат:
Найдено подходящая стоимость: 10
Пример использования Argon2:
<?php эхо ' хеш Argon2 : ' .password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ? >;Результат:
Хэш Argon2: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0