Генерирует PBKDF2-ключ на основе исходного пароля

# hash_pbkdf2

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

hash_pbkdf2 — Генерирует PBKDF2-ключ на основе исходного пароля

### Описание

function hash_pbkdf2(
string `$algo`,
#[\SensitiveParameter]string `$password`,
string `$salt`,
int `$iterations`,
int `$length` = 0,
bool `$binary` = `false`,
array `$options` = []
): string

### Список параметров

`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` лучше для хранения паролей.

### Смотрите также

- password_hash() - Создаёт хеш пароля
- hash_hkdf() - Формирует HKDF-ключ из исходного ключа
- sodium_crypto_pwhash() - Получает ключ из пароля алгоритмом Argon2

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open