Position actuelle: Accueil> Derniers articles> La fonction hash_update_stream est-elle cohérente avec la valeur de hachage générée par hash_file ()?

La fonction hash_update_stream est-elle cohérente avec la valeur de hachage générée par hash_file ()?

M66 2025-06-12

Dans PHP, HASH_UPDATE_STREAM et HASH_FILE () sont des fonctions utilisées pour générer des valeurs de hachage, mais elles sont utilisées différemment, ce qui peut provoquer les valeurs de hachage qu'ils génèrent incohérentes dans certains cas. Cet article analysera ces deux fonctions et explorera la cohérence de leurs valeurs de hachage.

1. Fonction hash_update_stream

La fonction hash_update_stream est utilisée pour mettre à jour progressivement une valeur de hachage via un flux. Lorsque vous utilisez cette fonction, nous devons fournir un flux de ressources (comme un flux de fichiers), puis mettre à jour le calcul de hachage en appelant plusieurs fois Hash_update_stream . Cette méthode convient généralement aux scénarios où les données doivent être lues en bloc par bloc.

Exemple de code:

 <?php
$hash = hash_init('sha256'); // L&#39;algorithme de hachage d&#39;initialisation est sha256
$fp = fopen('sample.txt', 'rb'); // Ouvrez le flux de fichiers

// Mettre à jour la valeur de hachage via le flux
while (!feof($fp)) {
    $data = fread($fp, 4096);  // Lire le contenu du fichier Bloc par bloc
    hash_update_stream($hash, $data); // Mettre à jour la valeur de hachage
}

fclose($fp);

// Obtenez la valeur de hachage finale
echo hash_final($hash);
?>

2. Fonction hash_file ()

Contrairement à hash_update_stream , hash_file () est une fonction plus simple qui hache directement le fichier sans avoir à lire le bloc de données par bloc. Il gère automatiquement la lecture du fichier en interne et génère des valeurs de hachage.

Exemple de code:

 <?php
// utiliser hash_file Calculez directement la valeur de hachage du fichier
$hash_value = hash_file('sha256', 'sample.txt');
echo $hash_value;
?>

3. Les valeurs de hachage sont-elles générées par les deux cohérentes?

Hash_update_stream et hash_file () peuvent être utilisés pour générer des valeurs de hachage pour les fichiers, mais ils sont calculés légèrement différemment, ce qui peut entraîner des différences de valeurs de hachage. Bien que ces deux fonctions devraient théoriquement donner les mêmes résultats, car Hash_update_stream met progressivement à jour la valeur de hachage et dépend de la manière de lire le flux de fichiers, Hash_File () Hash Calculs de hachage sur l'ensemble du fichier. Dans certains cas, des facteurs tels que la taille du tampon de la lecture du flux, l'ordre de la lecture du fichier peut affecter la génération de la valeur de hachage.

Cependant, dans les scénarios d'utilisation standard, lorsque le fichier ne change pas et qu'il n'y a pas d'autres distractions, les valeurs de hachage générées par hash_update_stream et hash_file () devraient être les mêmes. En effet, ils utilisent le même algorithme de hachage et que les données utilisées lors du calcul du hachage sont exactement cohérentes.

4. Résumé

  • hash_update_stream est une méthode de mise à jour progressive des valeurs de hachage, adaptées aux scénarios avec des fichiers volumineux ou des données de streaming.

  • hash_file () est une méthode pratique pour calculer la valeur de hachage d'un fichier, adapté aux calculs de hachage directement sur les fichiers.

  • Théoriquement, dans des conditions standard, les valeurs de hachage générées par hash_update_stream et hash_file () doivent être cohérentes, mais il convient de noter que différentes méthodes de lecture peuvent affecter les résultats du calcul.

Dans le développement réel, si vous calculez simplement la valeur de hachage d'un fichier, l'utilisation de hash_file () est le choix le plus simple et le plus efficace. Si vous devez lire les données étape par étape et mettre à jour la valeur de hachage, alors hash_update_stream sera un meilleur choix.