(PHP 5 >= 5.5.0, PHP 7)
hash_pbkdf2 — Genera una derivación de clave PBKDF2 de una contraseña proporcionada
$algo
, string $password
, string $salt
, int $iterations
[, int $length
= 0
[, bool $raw_output
= false
]] ) : string
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.
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.
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).
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
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.