Position actuelle: Accueil> Derniers articles> Méthodes pour comparer les valeurs de hachage à l'aide de hash_final et de hash_equals

Méthodes pour comparer les valeurs de hachage à l'aide de hash_final et de hash_equals

gitbox 2025-05-29

HASH_FINAL est une fonction de PHP pour obtenir la valeur de hachage finale du contexte de hachage. Habituellement, Hash_Final sera utilisé avec les fonctions HASH_INIT et HASH_UPDATE pour créer progressivement les valeurs de hachage. La valeur de hachage générée par HASH_FINAL est immuable.

Syntaxe de la fonction HASH_FINAL :

 string hash_final ( resource $context [, bool $raw_output = false ] )
  • $ Context : contexte de hachage créé via des fonctions telles que Hash_Init et Hash_update .

  • $ raw_output : si vrai , les données binaires d'origine seront renvoyées; Si false (par défaut), la chaîne hexadécimale sera renvoyée.

Exemple:

 <?php
$data = "Hello, World!";
$context = hash_init('sha256');
hash_update($context, $data);
$hash = hash_final($context);

echo "Hash value: " . $hash;
?>

Résultat de sortie:

 Hash value: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2

Dans cet exemple, nous utilisons HASH_INIT pour initialiser un contexte de hachage SHA-256, utilisons Hash_update pour mettre à jour les données de hachage et obtenir la valeur de hachage finale via Hash_Final .

2. Introduction à la fonction hash_equals

La fonction HASH_EQUALS est une fonction de PHP qui est utilisée pour comparer en toute sécurité deux valeurs de hachage. Il s'agit d'un outil clé pour empêcher les attaques temporelles. En l'absence de hash_equals , une valeur de hachage de comparaison de l'opérateur simple == peut entraîner des fuites de temps en raison de différentes longueurs de chaîne, qui peuvent être exploitées par des pirates pour spéculer sur certaines informations.

Hash_Equals garantit que le même temps est consommé dans tous les cas en comparant les valeurs de hachage de deux chaînes, évitant ainsi des attaques de temps.

Syntaxe de fonction HASH_EQUALS :

 bool hash_equals ( string $known_string , string $user_string )
  • $ connu_string : une valeur de hachage connue (généralement une valeur de hachage stockée dans la base de données).

  • $ user_string : la valeur de hachage entrée par l'utilisateur.

Exemple:

 <?php
$stored_hash = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2";
$user_input = "Hello, World!";

if (hash_equals($stored_hash, hash('sha256', $user_input))) {
    echo "The hashes match.";
} else {
    echo "The hashes do not match.";
}
?>

Résultat de sortie:

 The hashes match.

Dans cet exemple, Hash_Equals est utilisé pour comparer en toute sécurité la valeur de hachage stockée avec la valeur de hachage d'entrée utilisateur. Si les deux hachages sont égaux, cela signifie que l'entrée est correcte.

3. Utilisez Hash_Final et Hash_Equals en combinaison

Habituellement, nous utilisons Hash_final et Hash_Equals ensemble pour nous assurer que les valeurs de hachage sont calculées et comparées en toute sécurité. Par exemple, lors de la vérification du mot de passe, nous utiliserons d'abord Hash_Final pour créer une valeur de hachage du mot de passe, puis utiliser Hash_Equals pour comparer en toute sécurité le mot de passe entré par l'utilisateur avec la valeur de hachage stockée dans la base de données.

Exemple complet:

 <?php
// Supposons que le mot de passe soumis par l&#39;utilisateur
$user_input_password = "user_password123";

// Hash de mot de passe stocké dans la base de données(Dans l&#39;exemple, code dur)
$stored_password_hash = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2";

// passer hash_final Calculez la valeur de hachage du mot de passe d&#39;entrée
$context = hash_init('sha256');
hash_update($context, $user_input_password);
$user_input_hash = hash_final($context);

// utiliser hash_equals Comparez les valeurs de hachage de mot de passe en toute sécurité
if (hash_equals($stored_password_hash, $user_input_hash)) {
    echo "Password is correct.";
} else {
    echo "Password is incorrect.";
}
?>

Résultat de sortie:

 Password is correct.

Dans cet exemple, nous utilisons Hash_Final pour calculer la valeur de hachage du mot de passe d'entrée de l'utilisateur, puis le comparons avec la valeur de hachage stockée via Hash_Equals . De cette façon, nous assurons la sécurité des comparaisons de hachage et empêchons d'éventuelles attaques temporelles.