(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash — Dérive une clé à partir d'un mot de passe, en utilisant Argon2
$length,$password,$salt,$opslimit,$memlimit,$algo = SODIUM_CRYPTO_PWHASH_ALG_DEFAULTCette fonction fournit un accès de bas niveau à la fonction de dérivation de clé crypto_pwhash de libsodium. À moins d'avoir une raison spécifique d'utiliser cette fonction, vous devriez utiliser les fonctions sodium_crypto_pwhash_str() ou password_hash() à la place.
Une raison courante d'utiliser cette fonction est de dériver les graines pour les clés cryptographiques à partir d'un mot de passe et d'un sel, puis d'utiliser ces graines pour générer les clés réelles nécessaires à un certain usage (par exemple sodium_crypto_sign_detached()).
lengthpasswordsaltSODIUM_CRYPTO_PWHASH_SALTBYTES octets.
opslimitSODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE et SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE.
memlimitSODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE et SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE. Typiquement, ces valeurs devraient être associées aux valeurs opslimit correspondantes.
algoSODIUM_CRYPTO_PWHASH_ALG_DEFAULT (l'algorithme actuellement recommandé, qui peut changer d'une version de libsodium à une autre), ou explicitement en utilisant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13, représentant l'algorithme Argon2id version 1.3.
Renvoie la clé dérivée. La valeur de retour est une chaîne binaire du hachage, pas une représentation encodée en ASCII, et ne contient pas d'informations supplémentaires sur les paramètres utilisés pour créer le hachage, donc vous devrez conserver ces informations si vous devez jamais vérifier le mot de passe à l'avenir. Utilisez sodium_crypto_pwhash_str() pour éviter d'avoir besoin de faire tout cela.
Exemple #1 Exemple de sodium_crypto_pwhash()
<?php
//Requis pour conserver le sel si nous devons jamais vérifier ce mot de passe
$salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES);
//Utiliser bin2hex pour garder la sortie lisible
echo bin2hex(
sodium_crypto_pwhash(
16, // == 128 bits
'password',
$salt,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13
)
);
?>Résultat de l'exemple ci-dessus est similaire à :
a18f346ba57992eb7e4ae6abf3fd30ee