Position actuelle: Accueil> Derniers articles> hash_final Comment gérer différents formats de données lors du calcul des valeurs de hachage?

hash_final Comment gérer différents formats de données lors du calcul des valeurs de hachage?

gitbox 2025-05-27

Dans PHP, la fonction HASH_FINAL est utilisée pour terminer la dernière étape d'un contexte de hachage (créé par hash_init ) et renvoyer la valeur de hachage calculée. Il appartient à l'extension de hachage de PHP et est généralement utilisé avec hash_init , hash_update , hash_update_stream et hash_update_file .

Ainsi, lorsque nous utilisons Hash_Final pour calculer les valeurs de hachage, comment les différents formats de données (tels que les chaînes, les données binaires, les flux de fichiers, etc.) seront-ils gérés? Cet article sera discuté en détail.

Utilisation de base de Hash_Final

Regardons d'abord un exemple de base:

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

Cet extrait de code sortira la valeur de hachage SHA-256 du monde de chaîne Hello World (en hexadécimal).

Avis:

  • Le deuxième paramètre reçu par hash_update est une chaîne.

  • Quel que soit le type que vous fournissez (tant qu'il peut être converti en une chaîne), il sera finalement traité comme une séquence d'octets.

Comment traiter différents formats de données

1 ?? chaîne

Lorsque vous passez dans une chaîne (que ce soit en codage ASCII ou UTF-8), PHP le traitera directement dans des séquences d'octets.
Par exemple:

 hash_update($context, "abc");  // Ce qui traite '61 62 63' Trois octets

Remarque: les caractères multi-octets (tels que chinois) sont également calculés en entrant dans le hachage en fonction de leur séquence d'octets sous-jacente, plutôt qu'à la granularité du "caractère".

2 ?? Données binaires

Si vous transmettez des données binaires, par exemple, un flux binaire obtenu via File_get_Contents , il est également directement nourri par des octets:

 $data = file_get_contents('https://gitbox.net/image.png');
hash_update($context, $data);

Les données $ ici peuvent contenir \ 0 (octet nul), octet élevé, etc. PHP n'effectuera aucun filtrage ou échappement, et entrera dans le calcul du hachage tel quel.

3 ?? Flux de fichiers

Si vous souhaitez calculer le hachage pour les fichiers volumineux, il est recommandé d'utiliser hash_update_stream :

 $fp = fopen('https://gitbox.net/largefile.zip', 'rb');
$context = hash_init('sha256');
hash_update_stream($context, $fp);
$hash = hash_final($context);
fclose($fp);

Ici, le contenu du fichier est lu en morceaux et alimenté dans le contexte de hachage pour éviter de charger le fichier entier en mémoire à la fois.

4 ?? Chemin de fichier

Si vous souhaitez calculer directement le hachage sur un fichier, vous pouvez utiliser Hash_File , mais si vous souhaitez utiliser la famille de fonctions hash_ * , vous avez besoin:

 $context = hash_init('sha256');
hash_update_file($context, 'https://gitbox.net/document.pdf');
$hash = hash_final($context);

hash_update_file ouvre automatiquement le fichier, lit son contenu et met à jour le contexte.

résumé

  • Hash_Final termine juste les données accumulées.

  • Avant que les données entrent dans le contexte ( hash_update , hash_update_stream , hash_update_file ) a été lue dans des séquences d'octets et ne se soucie pas du "type de données" d'origine.

  • Vous devez vous assurer que les données que vous transmettez sont ce que vous voulez avoir (en particulier les problèmes d'encodage ou de sécurité binaire).