string hash_pbkdf2 (
string $algo,
string $password,
string $salt,
int $iterations,
int $length = 0,
bool $raw_output = false
)
$ algo : spécifie l'algorithme de hachage utilisé, tel que Sha256 , Sha1 , etc. Il doit s'agir d'un algorithme pris en charge par PHP.
$ mot de passe : mot de passe ou clé d'origine.
$ sel : valeur de sel aléatoire pour empêcher le même mot de passe de générer le même hachage.
$ itérations : le nombre d'itérations, plus la sécurité est élevée, plus la consommation de performances est élevée.
$ Longueur : la longueur de clé de sortie, par défaut 0 représente la longueur par défaut de l'algorithme de hachage de sortie.
$ raw_output : s'il faut sortir le format binaire, par défaut faux pour sortir la chaîne hexadécimale.
hash_pbkdf2('sha999', 'password', 'salt', 1000);
Cause d'erreur: SHA999 n'est pas un algorithme valide, l'appel échouera ou un avertissement sera lancé.
Solution : appelez hash_algos () pour obtenir la liste des algorithmes pris en charge et sélectionnez l'algorithme correct.
hash_pbkdf2('sha256', 'password', 'salt', 0);
Cause d'erreur: Le nombre d'itérations doit être un entier positif, 0 ou des nombres négatifs ne sont pas valides, ce qui peut provoquer une sécurité extrêmement faible.
Solution : Le nombre d'itérations doit être défini sur au moins 1000, et la valeur spécifique doit être ajustée en fonction des exigences de sécurité de l'application.
hash_pbkdf2('sha256', 'password', 'salt', 1000, 99999);
Cause d'erreur: une demande trop grande longueur peut entraîner une chaîne vide ou un goulot d'étranglement de performances.
Solution : La longueur générale de sortie est recommandée de ne pas dépasser plusieurs fois la longueur de sortie maximale de l'algorithme de hachage. Généralement, si la longueur de sortie de SHA256 est de 32 octets, elle devrait être raisonnable lors de la définition de la longueur de $ .
hash_pbkdf2('sha256', 'password', 'salt', 1000, 64, 'true');
Cause d'erreur: $ raw_output devrait être une valeur booléenne, le passage d'une chaîne provoquera un avertissement de type ou ne répondra pas au format de sortie attendu.
Solution : passer explicitement en type booléen vrai ou faux .
$algos = hash_algos();
print_r($algos);
Vérifiez quels algorithmes de hachage sont pris en charge dans l'environnement PHP actuel pour éviter les erreurs de paramètres.
Imprimez les paramètres avant d'appeler et confirmez que la valeur du paramètre est correcte.
$algo = 'sha256';
$password = 'myPassword';
$salt = 'randomSalt';
$iterations = 1000;
$length = 64;
var_dump($algo, $password, $salt, $iterations, $length);
$key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, false);
echo $key;
Observez le temps passé après le nombre d'itérations fixées à travers la fonction de synchronisation pour trouver le point d'équilibre entre la sécurité et les performances.
$start = microtime(true);
hash_pbkdf2('sha256', 'password', 'salt', 10000);
$end = microtime(true);
echo "prend du temps:" . ($end - $start) . "Deuxième";
Confirmez si les résultats de sortie répondent à la longueur et au format attendus (hexadécimal ou binaire).
$algo = 'sha256';
$password = 'user_password';
$salt = 'unique_salt_value';
$iterations = 10000;
$length = 64; // 64Personnages hexadécimaux,égal32octet
$raw_output = false;
$derived_key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, $raw_output);
echo "Clé dérivée:" . $derived_key;
Notez que le sel ici doit être unique et aléatoire, avec un nombre raisonnable d'itérations et que l'algorithme existe.
Lorsque vous utilisez HASH_PBKDF2 , assurez-vous de confirmer que l'algorithme de hachage est valide.
Le nombre d'itérations doit être fixé raisonnablement pour assurer la sécurité et les performances.
Les paramètres de longueur et de format de sortie doivent être conformes aux attentes.
Pendant le débogage, Hash_Algos () , Var_Dump et les fonctions de synchronisation peuvent être utilisés pour aider à positionner les problèmes.
La maîtrise peut vous aider à éviter les risques de sécurité et à programmer des anomalies causées par des erreurs de paramètres.