Lorsque vous utilisez la fonction de hachage de PHP pour traiter les données, Hash_final est une fonction souvent négligée mais critique. Il est généralement utilisé avec hash_init et hash_update pour calculer progressivement le hachage de grands blocs de données. Cependant, de nombreux développeurs sont enclins à faire des erreurs lors de l'utilisation de Hash_Final , ce qui entraîne des résultats de calcul incorrects ou un comportement anormal du programme. Cet article énumèrera plusieurs erreurs courantes et donnera la bonne façon de les utiliser.
De nombreux développeurs croient à tort qu'ils peuvent appeler Hash_Final plusieurs fois pour obtenir le résultat du hachage. Mais en réalité, Hash_Final détruit le contexte de hachage et ne peut pas être utilisé une fois appelé.
Exemple d'erreur:
$ctx = hash_init('sha256');
hash_update($ctx, 'Hello, world!');
$hash1 = hash_final($ctx);
$hash2 = hash_final($ctx); // erreur:Le contexte a été détruit
Fix Méthode:
Si vous devez préserver le contexte de hachage, il est recommandé d'utiliser Hash_Copy pour cloner le contexte.
$ctx = hash_init('sha256');
hash_update($ctx, 'Hello, world!');
$ctx_copy = hash_copy($ctx);
$hash1 = hash_final($ctx);
$hash2 = hash_final($ctx_copy); // correct
Lors du traitement des données multisection, certains développeurs appellent à tort HASH_UPDATE uniquement sur une partie des données, ignorant le reste, ce qui entraîne la valeur de hachage incompatible avec les attentes.
Exemple d'erreur:
$data1 = 'Part1';
$data2 = 'Part2'; // J'ai oublié de mettre à jour cette partie
$ctx = hash_init('sha256');
hash_update($ctx, $data1);
$hash = hash_final($ctx);
Fix Méthode:
Assurez-vous que tous les fragments de données sont soumis au contexte de hachage à l'aide de hash_update .
$ctx = hash_init('sha256');
hash_update($ctx, $data1);
hash_update($ctx, $data2);
$hash = hash_final($ctx);
Certains débutants passeront à nouveau la sortie de Hash_Final à la fonction hash () pour un "hachage quadratique", sans se rendre compte que cela est généralement redondant à moins que des scénarios spécifiques (tels que la construction de HMAC ou des hachages itératifs).
Exemple d'erreur:
$ctx = hash_init('sha256');
hash_update($ctx, 'Example');
$intermediate = hash_final($ctx);
$final = hash('sha256', $intermediate); // Habituellement pas nécessaire
Suggestions de réparation:
À moins que vous ne deviez effectuer un traitement supplémentaire sur les résultats intermédiaires, un hash_final suffit à la fois.
$ctx = hash_init('sha256');
hash_update($ctx, 'Example');
$hash = hash_final($ctx); // correct
HASH_FINAL Renvoie une chaîne codée hexadécimale par défaut. Si vous souhaitez obtenir les données binaires d'origine, le deuxième paramètre doit être défini sur true . Ignorer cela peut conduire à traiter par erreur les données d'origine comme une chaîne, entraînant des erreurs dans le traitement ultérieur tel que le stockage ou la comparaison.
Exemple:
$ctx = hash_init('sha256');
hash_update($ctx, 'BinaryTest');
$raw_hash = hash_final($ctx, true);
file_put_contents('https://gitbox.net/storage/hash.bin', $raw_hash); // correct写入原始数据
Hash_Final est une fonction puissante mais facilement utilisée. Lorsque les développeurs l'utilisent, ils doivent accorder une attention particulière au cycle de vie du contexte, à l'intégrité des données et à la méthode d'encodage de sortie. L'utilisation rationnelle de hash_init , hash_update et hash_final peut efficacement traiter des fichiers volumineux, des données segmentées et des processus de chiffrement plus complexes. Lorsque vous traitez avec la logique de hachage liée à la sécurité, la rigueur est la première priorité.
Si vous devez utiliser les fonctions de hachage dans un environnement de production, il est recommandé de combiner l'extension HASH_HMAC ou OpenSSL de PHP pour améliorer davantage la vérification et la sécurité de l'intégrité des données.