Aktueller Standort: Startseite> Neueste Artikel> So überprüfen Sie den Dateihash -Wert in Kombination mit Hash_equals ()

So überprüfen Sie den Dateihash -Wert in Kombination mit Hash_equals ()

M66 2025-05-27

In vielen Anwendungen ist es sehr wichtig, die Integrität der Datei zu überprüfen. Insbesondere wenn Sie eine Datei herunterladen oder hochladen müssen, ist es sehr wichtig, sicherzustellen, dass die Datei nicht manipuliert oder beschädigt ist. PHP bietet eine Vielzahl von Methoden zur Durchführung von Hash -Überprüfungen von Dateien, bei denen Hash_Update_Stream und Hash_equals () zwei häufig verwendete Funktionen sind.

In diesem Artikel wird vorgestellt, wie die Funktion von Hash_Update_Stream verwendet wird, um die Datei schrittweise zu lesen und den Hash -Wert zu berechnen und dann die Funktion von Hash_equals () zu verwenden, um den berechneten Hash -Wert mit dem erwarteten Hash -Wert zu vergleichen, um die Integrität der Datei zu überprüfen.

Was sind Hash_Update_Stream und Hash_equals () ?

  • Hash_Update_Stream : Diese Funktion wird verwendet, um den Hash -Wert des Datenstroms zu berechnen. Bei der Verarbeitung großer Dateien kann das Problem des Speicherüberlaufs effektiv vermieden werden, indem die Dateien in Stücken gelesen und den Hash -Wert allmählich aktualisiert werden.

  • Hash_Equals : Dies ist eine sichere Funktion zum Vergleich von zwei Hash -Werten. Es verhindert Timing -Angriffe und ist sicherer als die Verwendung von == oder == direkt, da es keine Zeitdifferenz aufgrund unterschiedlicher Längen der Hash -Werte aufdeckt.

Wie überprüfen Sie den Dateihash -Wert mit Hash_Update_Stream und Hash_equals () ?

Angenommen, Sie haben bereits eine Datei und einen erwarteten Hash -Wert, möchten die Integrität der Datei überprüfen, indem Sie die folgenden Schritte befolgen.

Schritt 1: Öffnen Sie die Datei

Zunächst müssen wir die zu überprüfende Datei öffnen. Wir können fopen () verwenden, um die Datei zum Lesen zu öffnen.

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

Schritt 2: Initialisieren Sie den Hash -Kontext

Verwenden Sie dann Hash_init () , um einen Hash -Kontext zu initialisieren. Nehmen Sie hier als Beispiel SHA256 . Natürlich können Sie auch andere Hashing -Algorithmen (wie MD5 , SHA512 usw.) verwenden.

 $hashContext = hash_init('sha256');

Schritt 3: Lesen Sie die Datei Schritt für Schritt und aktualisieren Sie den Hash -Wert

Wir lesen die Datei in Teilen und aktualisieren die Daten jedes Blocks über die Funktion von Hash_Update_Stream () in den Hash -Kontext.

 while (!feof($file)) {
    $data = fread($file, 8192); // Lesen8KBDatenblöcke
    hash_update_stream($hashContext, $data);
}

Schritt 4: Berechnen Sie den endgültigen Hash -Wert der Datei

Verwenden Sie nach dem Lesen der Datei Hash_Final () , um den berechneten Dateihash -Wert zu erhalten.

 $fileHash = hash_final($hashContext);

Schritt 5: Vergleichen Sie den Datei -Hash mit dem erwarteten Hash

Schließlich verwenden wir Hash_equals () , um den berechneten Datei -Hash -Wert sicher mit dem erwarteten Hash -Wert zu vergleichen, um sicherzustellen, dass die Datei nicht manipuliert wurde.

 $expectedHash = 'Erwarteter Hash -Wert'; // Sie können diesen Hash -Wert von einem Server oder einem anderen sicheren Ort erhalten

if (hash_equals($fileHash, $expectedHash)) {
    echo "Datei vollständig,Hash -Wert -Matching!";
} else {
    echo "Dateien sind beschädigt oder manipuliert,Hash -Werte stimmen nicht überein!";
}

Beispielcode

Hier ist der vollständige Beispielcode:

 <?php

// Öffnen Sie die Datei
$file = fopen('path/to/your/file', 'rb');
if (!$file) {
    die('无法Öffnen Sie die Datei');
}

// Initialisieren Sie den Hash -Kontext
$hashContext = hash_init('sha256');

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

// Holen Sie sich den Hash -Wert der Datei
$fileHash = hash_final($hashContext);

// Erwarteter Hash -Wert
$expectedHash = 'Erwarteter Hash -Wert'; // Zum Beispiel,'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'

// Vergleichen Sie die Hash -Werte
if (hash_equals($fileHash, $expectedHash)) {
    echo "Datei vollständig,Hash -Wert -Matching!";
} else {
    echo "Dateien sind beschädigt oder manipuliert,Hash -Werte stimmen nicht überein!";
}

// Schließen Sie die Datei
fclose($file);

?>