HASH_FINAL est une fonction de PHP pour calculer les valeurs de hachage. Il est utilisé pour terminer l'opération de hachage et renvoyer la valeur de hachage finale. HASH_FINAL est généralement utilisé conjointement avec Hash_Init et Hash_update pour former un processus complet de calcul de hachage.
<?php
$data = "Hello, GitBox!";
$context = hash_init('sha256'); // initialisation SHA256 Algorithme de hachage
hash_update($context, $data); // Mettre à jour la valeur de hachage
$hash = hash_final($context); // Obtenez la valeur de hachage finale
echo $hash; // Valeur de hachage de sortie
?>
Dans cet exemple, nous utilisons HASH_INIT pour initialiser un contexte de hachage SHA256 et mettre à jour en continu les données via Hash_update , et enfin obtenez la valeur de hachage finale via HASH_FINAL . Les appels fréquents à HASH_FINAL peuvent aider à optimiser l'utilisation de la mémoire lorsqu'ils traitent de grandes quantités de données, car elles peuvent éviter l'utilisation de la mémoire lors du calcul de toutes les données à la fois.
La fonction HASH_COPY est utilisée pour copier un contexte de hachage déjà existant. De cette façon, nous pouvons copier un contexte de hachage calculé dans un autre nouveau contexte sans avoir à recalculer toutes les données. L'utilisation de Hash_Copy est particulièrement adaptée à certains cas où nous devons stocker ou diviser temporairement le processus de calcul, mais nous ne voulons pas recommencer le hachage à partir de zéro.
<?php
$data1 = "Data Part 1";
$data2 = "Data Part 2";
$context1 = hash_init('sha256'); // initialisation SHA256 Algorithme de hachage
hash_update($context1, $data1); // Mettre à jour la valeur de hachage
$context2 = hash_copy($context1); // Copier le contexte du hachage
hash_update($context2, $data2); // Mettez à jour la deuxième partie des données
$hash1 = hash_final($context1); // Obtenez le hachage de la première partie des données
$hash2 = hash_final($context2); // Obtenez le hachage de la deuxième partie des données
echo "Hash 1: " . $hash1 . "\n";
echo "Hash 2: " . $hash2 . "\n";
?>
Dans le code ci-dessus, nous copie le contexte de hachage des premières données via Hash_Copy et continuons les calculs de hachage de la deuxième partie des données. De cette façon, nous évitons de recalculer le hachage des données entières à partir de zéro, améliorant ainsi les performances.
La combinaison rationnelle des fonctions HASH_FINAL et HASH_COPY peut efficacement améliorer les performances du calcul du hachage. Surtout lors du traitement des ensembles de données à grande échelle, le calcul directement de la valeur de hachage de toutes les données en même temps prendra beaucoup de mémoire et de ressources informatiques. Les performances peuvent être optimisées de la manière suivante:
Segmentation : Pour les fichiers volumineux ou les grands ensembles de données, utilisez Hash_init et Hash_update pour calculer les valeurs de hachage dans les segments au lieu de calculer toutes les données à la fois pour réduire l'utilisation de la mémoire.
Copie de contexte : Si vous devez traiter plusieurs parties de données pendant le processus de calcul, vous pouvez utiliser Hash_Copy pour copier le contexte de hachage pour éviter de redémarrer le calcul et de réduire les frais généraux de calcul.
Calcul de retard : lors de la gestion de plusieurs tâches de calcul de hachage indépendant, essayez de reporter l'appel Hash_Final jusqu'à ce que toutes les données soient prêtes pour le calcul final. Cela permet de réduire les calculs intermédiaires inutiles.
Afin de démontrer plus intuitivement les avantages de performance de Hash_Final et Hash_Copy , nous pouvons envisager de comparer deux méthodes de mise en œuvre différentes:
Façon traditionnelle : calculer la valeur de hachage de toutes les données à la fois
Méthode d'optimisation : calculer et copier le contexte de hachage dans les segments
Voici une comparaison des deux méthodes:
<?php
$data = "Some large data...";
$hash = hash('sha256', $data); // Calculez la valeur de hachage de toutes les données à la fois
echo $hash;
?>
<?php
$data = "Some large data...";
$context = hash_init('sha256');
hash_update($context, substr($data, 0, 1000)); // Calcul de la segmentation
$context2 = hash_copy($context);
hash_update($context2, substr($data, 1000, 1000)); // Continuer à calculer
$hash1 = hash_final($context); // Obtenez le hachage de la première partie
$hash2 = hash_final($context2); // Obtenez le hachage de la deuxième partie
echo $hash1 . $hash2;
?>
D'après la comparaison ci-dessus, nous pouvons voir que la méthode de calcul optimisée réduit efficacement la consommation de mémoire et améliore les performances par le traitement de la segmentation et Hash_Copy .