Position actuelle: Accueil> Derniers articles> Hash_Final Return Value Analysis: Comment gérer correctement les résultats du hachage?

Hash_Final Return Value Analysis: Comment gérer correctement les résultats du hachage?

gitbox 2025-05-27

Dans PHP, Hash_Final () est une fonction importante fournie par l'extension de hachage , qui est spécifiquement utilisée pour terminer le calcul de hachage basé sur le contexte ( contexte de hachage ). Lorsque vous l'utilisez, de nombreux développeurs le considèrent simplement comme une fonction de "prendre le résultat" et ignorent ses caractéristiques de sortie et la meilleure utilisation. Cet article analysera la valeur de retour de hash_final () en détail, discutera de ses caractéristiques, de ses mauvais usages et des techniques d'application dans le développement réel.

1. L'utilisation de base de Hash_final

Tout d'abord, jetons un coup d'œil à l'utilisation de base.

 <?php
$context = hash_init('sha256');
hash_update($context, 'Hello, World!');
$result = hash_final($context);
echo $result;
?>

Dans cet exemple, Hash_Final () renvoie une chaîne hexadécimale calculée par l' algorithme SHA256. Il s'agit du format de sortie par défaut de hash_final () .

?? Remarque : Une fois que Hash_Final () est appelé, le contexte sera "fermé" et ne peut plus être utilisé pour continuer à traiter avec hash_update () ou hash_final () . Si vous devez répéter le calcul, vous devez utiliser hash_copy () ou hash_init () .

2. Le format de sortie et la signification de Hash_final

Il existe deux formes de la valeur de retour de hash_final () :

  • Par défaut (chaîne hexadécimale) : facile à afficher ou à stocker directement.

  • Format binaire d'origine : plus adapté au traitement de bas niveau, comme le dépôt dans une base de données, en comparant avec d'autres données binaires, etc.

Pour obtenir le format binaire, vous pouvez passer le paramètre True :

 <?php
$context = hash_init('sha256');
hash_update($context, 'Hello, World!');
$binaryResult = hash_final($context, true);
echo bin2hex($binaryResult); // utiliserbin2hexVoir la représentation hexadécimale du binaire d&#39;origine
?>

? Conseil : si vous souhaitez stocker des hachages dans des environnements texte tels que les URL, les bases de données, JSON, etc., utilisez la sortie par défaut (hexadécimal); S'il est utilisé pour le chiffrement de bas niveau, les signatures, etc., il est recommandé d'utiliser le format binaire.

3. Malets et pièges communs

1 ?? Misonding 1: hash_final () peut être appelé plusieurs fois <br> De nombreux développeurs pensent qu'ils peuvent avoirh_final () plusieurs fois, mais en fait, le contexte est rejeté après son appelée, et une erreur sera signalée après son appelée. La solution consiste à utiliser hash_copy () :

 <?php
$context = hash_init('sha256');
hash_update($context, 'data1');
$copy = hash_copy($context);
hash_update($context, 'data2');
$result1 = hash_final($copy);
$result2 = hash_final($context);

2 ?? Misonding 2: comparaison directe entre binaire original et hexadécimal <br> Le binaire d'origine ( vrai ) et l'hexadécimal (par défaut) sont dans différents formats de codage, et la comparaison directe entraînera une erreur. Lorsque vous comparez, vous devez unifier le format, comme l'utilisation de bin2hex () .

4. Compétences et cas pratiques

? Astuce 1: hachage segmenté de fichiers

Lorsque vous souhaitez traiter des fichiers volumineux, vous pouvez utiliser la lecture segmentée pour combiner hash_update () et hash_final () pour éviter la lecture en mémoire à la fois.

 <?php
$context = hash_init('sha256');
$handle = fopen('/path/to/largefile.zip', 'rb');
while (!feof($handle)) {
    $data = fread($handle, 8192);
    hash_update($context, $data);
}
fclose($handle);
$hash = hash_final($context);
echo $hash;
?>

? Astuce 2: Utiliser avec HMAC

HMAC est un code d'authentification de message basé sur la clé. PHP fournit HASH_HMAC () pour des appels faciles, mais si vous utilisez un contexte, vous pouvez terminer manuellement des processus plus complexes.

 <?php
$context = hash_init('sha256', HASH_HMAC, 'secretkey');
hash_update($context, 'Important message');
$hmac = hash_final($context);
echo $hmac;
?>

5. Combiné avec des scénarios d'application pratiques

Dans le développement réel, les résultats de hash_final () doivent souvent être combinés avec des scénarios d'utilisation tels que la transmission du réseau, les appels d'interface, la vérification de signature, etc. Par exemple, lors de la génération d'un lien de téléchargement, vous pouvez:

 <?php
$file = 'installer.exe';
$secret = 'mysecret';
$context = hash_init('sha256', HASH_HMAC, $secret);
hash_update($context, $file);
$signature = hash_final($context);
$url = 'https://gitbox.net/download/' . $file . '?sig=' . $signature;
echo $url;
?>

Dans le lien généré de cette manière, le paramètre SIG est la signature sécurisée obtenue avec hash_final () , et le backend peut vérifier la légitimité de la demande de téléchargement de la même manière.