In der Webentwicklung war die Sicherheit von Dateiübertragung und Speicher immer ein Problem, das nicht ignoriert werden kann. Um sicherzustellen, dass die Integrität der Datei während der Übertragung zu verhindern, dass die Datei manipuliert wird, ist die Überprüfung der Dateisignatur eine gemeinsame und effektive Praxis. Die Funktion von Hash_Update_Stream () ist eines der wichtigsten Tools in PHP für die Verifizierung der Dateisignatur. In diesem Artikel wird vorgestellt, wie die Funktion Hash_Update_Stream () verwendet wird, um die Überprüfung der Dateisignatur zu implementieren und die Integrität und Sicherheit der Datei sicherzustellen.
Die Überprüfung der Dateisignatur ist eine Methode, die einen Hash -Algorithmus verwendet, um eine digitale Signatur auf dem Inhalt einer Datei zu generieren und dann die Integrität der Datei über diese Signatur zu überprüfen. Zu den allgemeinen Hashing-Algorithmen gehören MD5, SHA-1, SHA-256 usw. Sie können die Integrität von Dateien während der Übertragung überprüfen, indem sie eindeutige Dateifingerabdrücke generieren.
Wenn Dateien im Netzwerk übertragen werden, können Sie auf verschiedene Bedrohungen stoßen, wie z. B. Manipulationen für Dateien, Datenverlust usw. Um diese Probleme zu verhindern
Die Funktion von Hash_Update_Stream () in PHP wird verwendet, um die Hash -Werte zu aktualisieren. Dies ist sehr effektiv für die Behandlung großer Dateien, da der Hash -Wert Schritt für Schritt aktualisiert wird, ohne dass der gesamte Dateiinhalt gleichzeitig in Speicher geladen werden muss. Diese Funktion wird normalerweise mit Hash_init () und Hash_Final () -Funktionen verwendet, um den Erzeugung und den Überprüfungsprozess der Dateisignatur zu vervollständigen.
Die grundlegende Syntax von Hash_Update_Stream () lautet wie folgt:
bool hash_update_stream ( resource $context , resource $handle [, int $length = 1024 ] )
$ context : Dies ist der Hash -Kontext, der von der Funktion von Hash_init () erstellt wurde.
$ handle : Die Dateihandle der Datei, die über die Funktion fopen () erhalten werden kann.
$ Länge : Die Anzahl der Bytes, die jedes Mal gelesen werden, wenn der Hash aktualisiert wird, standardmäßig 1024 Bytes.
Zunächst müssen wir einen Hash -Algorithmus auswählen und einen Hash -Kontext initialisieren. In diesem Fall werden wir den SHA-256-Algorithmus verwenden.
$algorithm = 'sha256';
$context = hash_init($algorithm);
Als nächstes öffnen wir die Datei über die Funktion fopen () und verwenden die Funktion von Hash_Update_Stream () , um den Dateiinhalt allmählich zu lesen und den Hash -Wert zu aktualisieren. Dieser Vorgang kann große Dateien verarbeiten, ohne zu viel Speicher zu in Anspruch nehmen.
$file = fopen('file.txt', 'rb');
if ($file === false) {
die('Die Datei kann nicht geöffnet werden');
}
while (!feof($file)) {
hash_update_stream($context, $file);
}
fclose($file);
Sobald die Dateiinhalte alle gelesen und auf den Hash -Kontext aktualisiert werden, können wir den endgültigen Hash -Wert über die Funktion von Hash_Final () erhalten.
$fileHash = hash_final($context);
echo "Der Hash -Wert der Datei ist: " . $fileHash;
Um die Integrität der Datei zu überprüfen, müssen wir den Hash -Wert der Datei mit dem zuvor gespeicherten Hash -Wert vergleichen. Wenn die beiden übereinstimmen, wurde die Datei nicht manipuliert.
$expectedHash = 'Vorgespannter Hash-Wert';
if ($fileHash === $expectedHash) {
echo "Datei vollständig,Nicht manipuliert";
} else {
echo "Die Datei wurde manipuliert";
}
<?php
// Wählen Sie einen Hashing -Algorithmus aus
$algorithm = 'sha256';
// Initialisieren Sie den Hash -Kontext
$context = hash_init($algorithm);
// Öffnen Sie die Datei
$file = fopen('file.txt', 'rb');
if ($file === false) {
die('Die Datei kann nicht geöffnet werden');
}
// Aktualisieren Sie allmählich den Hash -Wert
while (!feof($file)) {
hash_update_stream($context, $file);
}
fclose($file);
// Holen Sie sich den Hash -Wert der Datei
$fileHash = hash_final($context);
echo "Der Hash -Wert der Datei ist: " . $fileHash . "\n";
// 验证Datei vollständig性
$expectedHash = 'Vorgespannter Hash-Wert';
if ($fileHash === $expectedHash) {
echo "Datei vollständig,Nicht manipuliert";
} else {
echo "Die Datei wurde manipuliert";
}
?>
Hohe Speicher -Effizienz : Die Funktion von Hash_Update_Stream () ermöglicht das allmähliche Lesen von Dateien und die Berechnung von Hash -Werten, die für die Verarbeitung großer Dateien geeignet sind und den Speicherverbrauch für das Laden der gesamten Datei gleichzeitig vermeiden.
Unterstützt mehrere Hashing-Algorithmen : PHP unterstützt mehrere Hashing-Algorithmen (wie SHA-256, SHA-512 usw.), und Sie können den entsprechenden Algorithmus entsprechend Ihren Anforderungen auswählen.
Einfach zu verwenden : Die Verwendung von Hash_Update_Stream () zur Überprüfung der Dateisignatur ist sehr einfach, und die Vollständigkeitsüberprüfung ist nur in wenigen Schritten erforderlich.
In den tatsächlichen Anwendungen wird die Überprüfung der Dateisignatur häufig in Kombination mit dem Download- und Upload -Vorgängen der Datei verwendet. Wenn Sie eine Website wie M66.net für die Dateiübertragung verwenden, ist die Versicherung für jede heruntergeladene Datei eine wichtige Sicherheitsmaßnahme. Sie können beispielsweise überprüfen, ob die von m66.net heruntergeladene Datei manipuliert wurde: