Dans PHP, Hash_Final est une fonction utilisée pour renvoyer une valeur de hachage, qui est souvent utilisée pour travailler avec d'autres fonctions de hachage. HASH_FINAL complète la dernière étape après le calcul, généralement utilisée avec hash_init et hash_update . Cependant, lors de l'utilisation de Hash_Final , il y a souvent des problèmes qui entraînent une valeur de hachage générée invalide ou non conformément aux attentes. Cet article expliquera comment éviter de générer des valeurs de hachage non valides lors de l'utilisation de la fonction HASH_FINAL .
PHP fournit une variété d'algorithmes de hachage, tels que MD5 , SHA256 , SHA512 , etc. Lorsque vous utilisez Hash_Final , vous devez vous assurer que l'algorithme correct est sélectionné. Si un algorithme non pris en charge est sélectionné ou si l'algorithme transmis à hash_init ne correspond pas, une valeur de hachage non valide sera générée.
Par exemple, l'extrait de code suivant montre la bonne façon d'utiliser l'algorithme:
// utiliser SHA256 algorithme
$context = hash_init('sha256');
hash_update($context, 'This is a test string.');
$hash = hash_final($context);
echo $hash;
Dans cet exemple, nous utilisons SHA256 comme algorithme de hachage et nous assurons que le contexte de hachage est initialisé par hash_init avant de calculer la valeur de hachage.
La fonction HASH_FINAL nécessite un paramètre de contexte valide, qui est créé via HASH_INIT . Si le contexte transmis à Hash_Final n'est pas valide, PHP renverra False , ce qui entraînera la génération de la valeur de hachage.
Par exemple, l'extrait de code suivant montre un contexte non valide:
$context = null; // erreur:Non initialisé le contexte correctement
$hash = hash_final($context);
echo $hash; // Sortir false
Pour éviter cela, assurez-vous que vous avez correctement initialisé le contexte avant d'appeler Hash_Final .
hash_update est utilisé pour ajouter des données au contexte de hachage. Si vous passez des chaînes non valides ou des données binaires, Hash_Final peut générer une valeur de hachage non valide. Assurez-vous que les données transmises à hash_update sont un flux de chaîne ou de données valide.
Par exemple, l'extrait de code suivant montre comment transmettre correctement les données:
$context = hash_init('sha256');
$data = 'Some data to hash';
hash_update($context, $data);
$hash = hash_final($context);
echo $hash; // Générer normalement les valeurs de hachage
Si vous avez besoin de hacher l'URL, assurez-vous qu'il n'y a pas de caractères illégaux dans l'URL. Par exemple, lors du calcul du hachage d'une URL, s'il y a des caractères spéciaux (tels que & , = , ? , etc.), ils peuvent affecter le résultat du calcul du hachage. Il est recommandé d' UrLencode ou de Rawurlencode codant pour l'URL pour s'assurer que l'URL est formatée correctement.
$url = "http://gitbox.net/api/getdata?query=hello&sort=asc";
$encoded_url = rawurlencode($url); // utiliser rawurlencode codage URL
$context = hash_init('sha256');
hash_update($context, $encoded_url);
$hash = hash_final($context);
echo $hash; // Valeur de hachage correcte
HASH_FINAL renvoie une chaîne qui représente la valeur de hachage calculée. Par défaut, la valeur de retour est une représentation hexadécimale minuscule. Si vous souhaitez renvoyer les données binaires d'origine, vous pouvez obtenir le hachage d'origine en définissant le deuxième paramètre sur true .
// Obtenir une corde hexadécimale
$context = hash_init('sha256');
hash_update($context, 'data');
$hash = hash_final($context);
echo $hash; // C'est une chaîne hexadécimale
// Obtenir des données binaires
$context = hash_init('sha256');
hash_update($context, 'data');
$hash = hash_final($context, true);
echo $hash; // Ce sont les données binaires d'origine
Cette méthode peut éviter les problèmes causés par la décalage dans le format de données dans l'application.
Pour éviter de générer des valeurs de hachage non valides lors de l'utilisation de la fonction HASH_FINAL , vous devez vous assurer ce qui suit:
Sélectionnez l'algorithme de hachage pris en charge et assurez-vous qu'il est cohérent avec l'algorithme utilisé par Hash_Init .
Assurez-vous que le contexte transmis à hash_final est valide.
Assurez-vous que le type de données transmis à hash_update est correct.
Si vous utilisez une URL, assurez-vous d'encoder et d'éviter les caractères illégaux.
Assurez-vous que le type renvoyé par HASH_FINAL répond à vos besoins (chaîne hexadécimale ou données binaires).
En suivant ces suggestions, vous pouvez éviter efficacement de générer des valeurs de hachage non valides et vous assurer que vos calculs de hachage sont plus fiables et précis.