In PHP ist Hash_Final eine wichtige Funktion, die mit Hash_init und Hash_Update verwendet wird. Es wird hauptsächlich verwendet, um Hash -Verdauungen (dh Signaturen) zu generieren, um die Integrität der Daten zu überprüfen. In diesem Artikel wird detailliert erläutert, wie Hash_Final korrekt verwendet wird, um Signaturen zu generieren und die Integrität von Nachrichten während der Übertragung oder gespeicherten Prozeduren sicherzustellen.
Hash_Final ist eine Funktion in der von PHP bereitgestellten Hash-Erweiterung, mit der eine schrittweise Hash-Operation abgeschlossen und das Ergebnis zurückgegeben wird. Der grundlegende Workflow ist wie folgt:
Initialisieren Sie einen Hash -Kontext mit Hash_init .
Verwenden Sie Hash_Update , um die Daten anzugreifen, um in den Kontext zu gehindert werden (kann mehrmals aufgerufen werden, um große Datenblöcke zu verarbeiten).
Verwenden Sie Hash_Final , um den endgültigen Hash -Wert (Signature) zu erhalten.
Dieser Schritt-für-Schritt-Ansatz eignet sich besonders für den Umgang mit großen Dateien oder zum Streaming von Daten, da Sie den gesamten Inhalt nicht gleichzeitig in Speicher laden müssen.
Schauen wir uns ein einfaches Beispiel an, das die Unterzeichnung einer Nachricht simuliert:
<?php
$message = 'Dies ist eine Nachricht, die Signatur erfordert';
$algo = 'sha256';
// Initialisieren Sie den Hash -Kontext
$context = hash_init($algo);
// Hash -Kontext aktualisieren,Daten können mehrmals hinzugefügt werden
hash_update($context, $message);
// Holen Sie sich die endgültige Signatur(Zusammenfassung)
$signature = hash_final($context);
// Ausgangssignatur
echo "Zeichen: " . $signature . "\n";
?>
In diesem Beispiel verwenden wir den SHA256 -Algorithmus, um eine Verdauung der Nachricht zu erstellen. Die Ausgabe ist ein hexadezimal codierter Hash -Wert, mit dem die Integrität der Nachricht am empfangenden Ende überprüft werden kann.
Die Erzeugung einer Signatur reicht nicht aus. Der Schlüssel ist, wie die Signatur überprüft wird . Ein vollständiger Prozess besteht normalerweise aus den folgenden Schritten:
1 ?? Schicken :
Eine Signatur erzeugen.
Senden Sie die Nachricht und die Signatur an den Empfänger.
2 ?? Empfänger :
Nachricht empfangen.
Regenerieren Sie die Signatur der Nachricht mit demselben Algorithmus.
Vergleichen Sie, ob die empfangene Signatur mit der berechneten Signatur übereinstimmt.
Codebeispiel (Empfindungsüberprüfung):
<?php
$received_message = 'Dies ist eine Nachricht, die Signatur erfordert';
$received_signature = '发送端提供的Zeichen';
$algo = 'sha256';
// 重新计算Zeichen
$context = hash_init($algo);
hash_update($context, $received_message);
$calculated_signature = hash_final($context);
// 比较Zeichen
if (hash_equals($received_signature, $calculated_signature)) {
echo "Die Nachricht ist abgeschlossen,Nicht manipuliert。\n";
} else {
echo "warnen:Die Nachricht wurde möglicherweise manipuliert!\n";
}
?>
? HINWEIS : Verwenden von Hash_equals zum Vergleich von Signaturen, anstatt == direkt zu verwenden, kann Zeitangriffe verhindern.
Angenommen, Sie möchten, dass der Benutzer eine Datei von https://gitbox.net/download/file.zip herunterlädt und einen Hash -Wert für die Überprüfung bereitstellt.
<?php
$file = 'file.zip';
$algo = 'sha256';
// Öffnen Sie das Streaming von Dateien
$context = hash_init($algo);
$handle = fopen($file, 'rb');
while (!feof($handle)) {
$data = fread($handle, 8192);
hash_update($context, $data);
}
fclose($handle);
// 获取文件的Zeichen(Hash -Wert)
$hash = hash_final($context);
echo "Link herunterladen: https://gitbox.net/download/file.zip\n";
echo "Datei Hashing(Wird verwendet, um die Integrität zu überprüfen): $hash\n";
?>
Downloader können denselben Algorithmus verwenden, um den heruntergeladenen Hash -Wert heruntergeladen zu berechnen, um sicherzustellen, dass er mit dem bereitgestellten Wert übereinstimmt, wodurch überprüft wird, ob die Datei vollständig ist und nicht manipuliert wurde.