(PHP 5 >= 5.5.0, PHP 7, PHP 8)
hash_pbkdf2 — Генерирует PBKDF2-ключ на основе исходного пароля
algo
Название алгоритма хеширования (например, "sha256"
).
Список алгоритмов, которые поддерживает функция, приводит описание функции hash_hmac_algos().
Замечание:
Некриптографические хеш-функции не допускаются.
password
Пароль для деривации.
salt
Соль для формирования ключа. Требуется сгенерировать случайное значение.
iterations
Количество внутренних итераций для преобразования исходного пароля в хеш-ключ.
length
Длина строки вывода. Если параметр
binary
задали как true
, значение этого параметра
соответствует длине ключа в байтах, если для параметра
binary
установили значение false
—
соответствует удвоенной длине ключа в байтах, поскольку каждый
байт ключа возвращается в виде двух шестнадцатеричных символов.
Со значением 0
функция вернёт весь вывод
заданного алгоритма.
binary
Функция выводит необработанные двоичные данные, если значение параметра равно true
.
Если false
— выводятся шестнадцатеричные строчные буквы в нижнем регистре.
options
Массив опций для алгоритмов хеширования.
Пока вариантами функций хеширования MurmurHash поддерживается только параметр "seed"
.
Функция возвращает строку, которая содержит сформированный ключ в виде
строки шестнадцатеричных чисел в нижнем регистре, если только для параметра
binary
не установили значение true
,
тогда возвращаются необработанные двоичные данные.
Функция выбрасывает исключение ValueError,
если алгоритм неизвестен, параметр
iterations
меньше или равен
0
, параметр length
меньше 0
или параметр salt
чрезмерно длинный (больше значения выражения INT_MAX
- 4
).
Версия | Описание |
---|---|
8.0.0 |
Теперь выбрасывается исключение ValueError, если возникла ошибка;
раньше функция возвращала false и выдавала ошибку уровня E_WARNING .
|
7.2.0 | Запретили некриптографические хеш-функции (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat). |
Пример #1 Пример базового использования функции hash_pbkdf2()
<?php
$password = "password";
$iterations = 600000;
// Создаём криптографически безопасную случайную соль функцией random_bytes()
$salt = random_bytes(16);
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
var_dump($hash);
// Для необработанного двоичного файла параметр $length требуется уменьшить вдвое, чтобы получить аналогичные результаты
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 10, true);
var_dump(bin2hex($hash));
?>
Вывод приведённого примера будет похож на:
string(20) "120fb6cffcf8b32c43e7" string(20) "120fb6cffcf8b32c43e7"
Метод PBKDF2 может использовать для хеширования паролей в
целях хранения. Однако следует отметить, что функция password_hash()
или функция crypt() с типом хеша CRYPT_BLOWFISH
лучше для хранения паролей.