# hash_pbkdf2

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

hash_pbkdf2 — Genera una derivación de clave PBKDF2 de una contraseña proporcionada

### Descripción

hash_pbkdf2(
string `$algo`,
string `$password`,
string `$salt`,
int `$iterations`,
int `$length` = 0,
bool `$raw_output` = false
): string

### Parámetros

`algo`

  El nombre del algoritmo hash seleccionado (esto es, `"md5"`, `"sha256"`, `"haval160,4"`, etc.). Véase hash_algos() para una lista de los algoritmos admitidos.

`password`

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

`salt`

  La sal a usar para la derivación. Este valor debería ser generado aleatoriamente.

`iterations`

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

`length`

  La longitud del string de salida. Si `raw_output` es `true`, se corresponde con la longitud en bytes de la clave derivada; si `raw_output` es `false`, se corresponde con dos veces la longitud en bytes de la clave derivada (ya que cada byte de la clave es devuelto como dos dígitos hexadecimales).

  Si se pasa `0`, se usará la salida completa del algoritmo proporcionado.

`raw_output`

  Cuando se establece a `true`, genera datos binarios puros. `false` genera dígitos hexadecimales en minúsculas.

### Valores devueltos

Devuelve un string que contiene la clave derivada como dígitos hexadecimales en minúsculas, a menos que `raw_output` sea establecido a `true`, en cuyo caso devuelve la represetación binaria pura de la clave derivada.

### Errores/Excepciones

Se emitirá un `E_WARNING` si el algoritmo es desconocido, el parámetro `iterations` es menor o igual a `0`, el parámetro `length` es menor que `0` o el parámetro `salt` es demasiado grande (mayor que `INT_MAX``- 4`).

### Ejemplos

Ejemplo #1 Ejemplo de uso básico de hash_pbkdf2()

`<?php
$contraseña = "password";
$iteraciones = 1000;
// Generar una IV aleatoria usando mcrypt_create_iv(),
// openssl_random_pseudo_bytes() u otra fuente disponible de aleatoriedad
$sal = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$hash = hash_pbkdf2("sha256", $contraseña, $sal, $iteraciones, 20);
echo $hash;
?>`

El resultado del ejemplo sería algo similar a:

    120fb6cffcf8b32c43e7

### Notas

Precaución

El método PBKDF2 se puede usar para el almacenamiento de contraseñas de hash. Sin embargo, se debería observar que password_hash() o crypt() con `CRYPT_BLOWFISH` son más adecuados para el almacenamiento de contraseñas.

### Ver también

- crypt() - Hash de cadenas de un sólo sentido
- password_hash() - Crea un hash de contraseña
- hash() - Generar un valor hash (resumen de mensaje)
- hash_algos() - Devuelve una lista con los algoritmos de cifrado soportados
- hash_init() - Iniciar un contexto de hashing incremental
- hash_hmac() - Genera un valor cifrado mediante una clave especificada usando el método HMAC
- hash_hmac_file() - Genera un valor cifrado mediante una clave especificada usando el método HMAC y el contenido de un fichero dado