hash_pbkdf2

(PHP 5 >= 5.5.0, PHP 7)

hash_pbkdf2Genera 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(16MCRYPT_DEV_URANDOM);

$hash hash_pbkdf2("sha256"$contraseña$sal$iteraciones20);
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() - Genera un valor cifrado con base a un string
  • hash_algos() - Devuelve una lista con los algoritmos de cifrado soportados
  • hash_init() - Inicializa un contexto incremental para cifrar
  • 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