Position actuelle: Accueil> Derniers articles> Comment vérifier la valeur de hachage des fichiers en combinaison avec hash_equals ()

Comment vérifier la valeur de hachage des fichiers en combinaison avec hash_equals ()

M66 2025-05-27

Dans de nombreuses applications, il est très important de vérifier l'intégrité du fichier. Surtout lorsque vous devez télécharger ou télécharger un fichier, il est très essentiel de vous assurer que le fichier n'est pas falsifié ou corrompu. PHP fournit une variété de méthodes pour effectuer des vérifications de hachage de fichiers, où hash_update_stream et hash_equals () sont deux fonctions couramment utilisées.

Cet article présentera comment utiliser la fonction hash_update_stream pour lire progressivement le fichier et calculer la valeur de hachage, puis utiliser la fonction hash_equals () pour comparer la valeur de hachage calculée avec la valeur de hachage attendue pour vérifier l'intégrité du fichier.

Que sont Hash_update_stream et hash_equals () ?

  • hash_update_stream : cette fonction est utilisée pour calculer la valeur de hachage du flux de données. Lors du traitement des fichiers volumineux, le problème du débordement de la mémoire peut être évité efficacement en lisant les fichiers en morceaux et en mettant progressivement à la mise à jour de la valeur de hachage.

  • hash_equals : Il s'agit d'une fonction sûre pour comparer deux valeurs de hachage. Il empêche les attaques de synchronisation et est plus sûre que d'utiliser == ou == directement car il n'expose pas la différence de temps en raison de longueurs différentes des valeurs de hachage.

Comment vérifier la valeur de hachage du fichier à l'aide de hash_update_stream et hash_equals () ?

En supposant que vous avez déjà un fichier et une valeur de hachage attendue, vous souhaitez vérifier l'intégrité du fichier en suivant les étapes ci-dessous.

Étape 1: ouvrez le fichier

Tout d'abord, nous devons ouvrir le fichier à vérifier. Nous pouvons utiliser fopen () pour ouvrir le fichier pour la lecture.

 $file = fopen('path/to/your/file', 'rb');

Étape 2: Initialiser le contexte du hachage

Ensuite, utilisez hash_init () pour initialiser un contexte de hachage. Prenez SHA256 comme exemple ici. Bien sûr, vous pouvez également utiliser d'autres algorithmes de hachage (comme MD5 , SHA512 , etc.).

 $hashContext = hash_init('sha256');

Étape 3: Lisez le fichier étape par étape et mettez à jour la valeur de hachage

Nous lisons le fichier en morceaux et mettons à jour les données de chaque bloc dans le contexte de hachage via la fonction hash_update_stream () .

 while (!feof($file)) {
    $data = fread($file, 8192); // Lire8KBBlocs de données
    hash_update_stream($hashContext, $data);
}

Étape 4: Calculez la valeur de hachage finale du fichier

Une fois le fichier lu, utilisez hash_final () pour obtenir la valeur de hachage du fichier calculé.

 $fileHash = hash_final($hashContext);

Étape 5: Comparez le hachage du fichier avec le hachage attendu

Enfin, nous utilisons hash_equals () pour comparer en toute sécurité la valeur de hachage du fichier calculé avec la valeur de hachage attendue pour garantir que le fichier n'a pas été falsifié.

 $expectedHash = 'Valeur de hachage attendue'; // Vous pouvez obtenir cette valeur de hachage à partir d'un serveur ou d'un autre endroit sécurisé

if (hash_equals($fileHash, $expectedHash)) {
    echo "Fichier complet,Correspondance de valeur de hachage!";
} else {
    echo "Les fichiers sont corrompus ou falsifiés,Les valeurs de hachage ne correspondent pas!";
}

Exemple de code

Voici l'exemple de code complet:

 <?php

// Ouvrir le fichier
$file = fopen('path/to/your/file', 'rb');
if (!$file) {
    die('无法Ouvrir le fichier');
}

// Initialiser le contexte du hachage
$hashContext = hash_init('sha256');

// 逐步Lire文件并更新哈希值
while (!feof($file)) {
    $data = fread($file, 8192);
    hash_update_stream($hashContext, $data);
}

// Obtenez la valeur de hachage du fichier
$fileHash = hash_final($hashContext);

// Valeur de hachage attendue
$expectedHash = 'Valeur de hachage attendue'; // Par exemple,'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'

// Comparez les valeurs de hachage
if (hash_equals($fileHash, $expectedHash)) {
    echo "Fichier complet,Correspondance de valeur de hachage!";
} else {
    echo "Les fichiers sont corrompus ou falsifiés,Les valeurs de hachage ne correspondent pas!";
}

// Fermez le fichier
fclose($file);

?>