(PHP 5 >= 5.5.0, PHP 7)
hash_pbkdf2 — Génère une clé PBKDF2 dérivée du mot de passe fourni
$algo
, string $password
, string $salt
, int $iterations
[, int $length
= 0
[, bool $raw_output
= false
]] )
algo
Nom de l'algorithme de hashage sélectionné (i.e. md5, sha256, haval160,4, etc..). Voir la fonction hash_algos() pour une liste des algorithmes supportés.
password
Le mot de passe à utiliser pour la dérivation.
salt
Le salt à utiliser pour la dérivation. Cette valeur doit être générée aléatoirement.
iterations
Le nombre d'itérations internes pour effectuer la dérivation.
length
La longueur de la chaîne de sortie. Si le paramètre
raw_output
vaut TRUE
, ce paramètre
correspondra à la longueur, en octets, de la clé dérivée ; si
le paramètre raw_output
vaut FALSE
,
il correspondra à deux fois la longueur, en octets, de la clé
dérivée (vu que chaque octet de la clé est retournée sur
deux hexits).
Si 0 est passé, la sortie complète de l'algorithme choisi sera utilisée.
raw_output
Lorsque définit à TRUE
, la fonction affichera les données
binaires brutes. Si vaut FALSE
, l'affichage se fera
en minuscule.
Retourne une chaîne contenant la clé dérivée en minuscule,
à moins que le paramètre raw_output
ne
soit positionné à TRUE
auquel cas, la représentation binaire brute
de la clé dérivée sera retournée.
Une alerte de type E_WARNING
sera émise si
l'algorithme n'est pas connu, si le paramètre iterations
est inférieur ou égal à 0, si la longueur
length
est inférieure ou égale à 0
ou si le salt
est trop long
(plus grand que INT_MAX
- 4).
Exemple #1 Exemple avec hash_pbkdf2()
<?php
$password = "password";
$iterations = 1000;
// Génère un IV aléatoire en utilisant la fonction mcrypt_create_iv(),
// openssl_random_pseudo_bytes() ou tout autre source aléatoire correspondante
$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
echo $hash;
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
120fb6cffcf8b32c43e7
La méthode PBKDF2 peut être utilisée pour hasher des mots de passe
pour le stockage. Cependant, vous devez garder à l'esprit que
la fonction password_hash() ou la fonction
crypt() avec la constante CRYPT_BLOWFISH
est meilleur pour cet usage.