(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
algoEl nombre del algoritmo hash seleccionado (esto es, "md5", "sha256", "haval160,4", etc.). Véase hash_algos() para una lista de los algoritmos admitidos.
passwordLa contraseña a usar para la derivación.
saltLa sal a usar para la derivación. Este valor debería ser generado aleatoriamente.
iterationsEl 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.