hash_pbkdf2

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

hash_pbkdf2Génère une clé PBKDF2 dérivée du mot de passe fourni

Description

hash_pbkdf2(
    string $algo,
    #[\SensitiveParameter] string $password,
    string $salt,
    int $iterations,
    int $length = 0,
    bool $binary = false,
    array $options = []
): string

Liste de paramètres

algo

Nom de l'algorithme d'hachage sélectionné (par exemple : "sha256"). Pour une liste des algorithmes supportés voir hash_hmac_algos().

Note:

Les fonctions d'hachage non cryptographiques ne sont pas autorisées.

password

Le mot de passe à utiliser pour la dérivation.

salt

Le sel à 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 binary vaut true, ce paramètre correspondra à la longueur, en octets, de la clé dérivée ; si le paramètre binary 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.

binary

Lorsque défini à true, la fonction affiche les données binaires brutes. Si vaut false, l'affichage se fera en minuscule.

options

Un tableau d'options pour les différents algorithmes d'hachage. Actuellement, seule la clé "seed" est supportée par les variantes MurmurHash.

Valeurs de retour

Retourne une chaîne contenant la clé dérivée en minuscule, à moins que le paramètre binary ne soit positionné à true auquel cas, la représentation binaire brute de la clé dérivée est retournée.

Erreurs / Exceptions

Une exception ValueError 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 à 0 ou si le salt est trop long (plus grand que INT_MAX - 4).

Historique

Version Description
8.0.0 Lève une exception ValueError dorénavant en cas d'erreur. Précédemment, false était retourné et un message E_WARNING était émis.
7.2.0 L'utilisation de fonctions d'hachage non cryptographiques (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat) a été désactivée.

Exemples

Exemple #1 Exemple avec hash_pbkdf2()

<?php
$password
= "password";
$iterations = 600000;

// Génère un sel cryptographiquement sécurisé aléatoire en utilisant la fonction random_bytes()
$salt = random_bytes(16);

$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
var_dump($hash);

// Pour du binaire brut, $length doit être divisé par deux pour des résultats équivalents
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 10, true);
var_dump(bin2hex($hash));
?>

Résultat de l'exemple ci-dessus est similaire à :

string(20) "120fb6cffcf8b32c43e7"
string(20) "120fb6cffcf8b32c43e7"

Notes

Attention

La méthode PBKDF2 peut être utilisée pour hacher des mots de passe pour le stockage. Cependant, il faut garder à l'esprit que la fonction password_hash() ou la fonction crypt() avec la constante CRYPT_BLOWFISH sont mieux adaptées pour cet usage.

Voir aussi