Genera una clave PBKDF2 derivada de la contraseña proporcionada

# hash_pbkdf2

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

hash_pbkdf2 — Genera una clave PBKDF2 derivada de la contraseña proporcionada

### Descripción

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

### Parámetros

`algo`

  Nombre del algoritmo de hash seleccionado (por ejemplo: `"sha256"`). Para una lista de los algoritmos soportados ver hash_hmac_algos().

  > Nota:

  > Las funciones de hash no criptográficas no están permitidas.

`password`

  La contraseña a utilizar para la derivación.

`salt`

  El salt a utilizar para la derivación. Este valor debe ser generado aleatoriamente.

`iterations`

  El número de iteraciones internas para efectuar la derivación.

`length`

  La longitud de la cadena de salida. Si el parámetro `binary` vale `true`, este parámetro corresponderá a la longitud, en bytes, de la clave derivada; si el parámetro `binary` vale `false`, corresponderá al doble de la longitud, en bytes, de la clave derivada (ya que cada byte de la clave es devuelto sobre dos hexits).

  Si `0` es pasado, la salida completa del algoritmo elegido será utilizada.

`binary`

  Cuando está definido a `true`, la función mostrará los datos binarios brutos. Si vale `false`, la visualización se hará en minúsculas.

`options`

  Un array de opciones para los diferentes algoritmos de hash. Actualmente, solo la clave `"seed"` es soportada por las variantes MurmurHash.

### Valores devueltos

Devuelve una cadena que contiene la clave derivada en minúsculas, a menos que el parámetro `binary` esté posicionado a `true` en cuyo caso, la representación binaria bruta de la clave derivada será devuelta.

### Errores/Excepciones

Una excepción ValueError si el algoritmo no es conocido, si el parámetro `iterations` es inferior o igual a `0`, si la longitud `length` es inferior o igual a `0` o si el `salt` es demasiado largo (mayor que `INT_MAX``- 4`).

### Historial de cambios

Versión | Descripción
--- | ---
7.2.0 | El uso de funciones de hash no criptográficas (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat) ha sido desactivado.
8.0.0 | Levanta una excepción ValueError ahora en caso de error. Anteriormente, `false` era devuelto y un mensaje `E_WARNING` era emitido.

### Ejemplos

Ejemplo #1 Ejemplo con hash_pbkdf2()

    <?php
    $password = "password";
    $iterations = 600000;

    // Genera un salt criptográficamente seguro aleatorio usando la función random_bytes(),
    $salt = random_bytes(16);

    $hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
    var_dump($hash);

    // Para binario bruto, $length debe ser dividido por dos para resultados equivalentes
    $hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 10, true);
    var_dump(bin2hex($hash));
    ?>

Resultado del ejemplo anterior es similar a:

    string(20) "120fb6cffcf8b32c43e7"
    string(20) "120fb6cffcf8b32c43e7"

### Notas

Precaución

El método PBKDF2 puede ser utilizado para hashear contraseñas para el almacenamiento. Sin embargo, debe tenerse en cuenta que la función password_hash() o la función crypt() con la constante `CRYPT_BLOWFISH` es mejor para este uso.

### Ver también

- password_hash() - Crea una clave de hash para una contraseña
- hash_hkdf() - Genera una derivación de clave HKDF a partir de una clave de entrada proporcionada
- sodium_crypto_pwhash() - Deriva una clave a partir de una contraseña, utilizando Argon2

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