Aktueller Standort: Startseite> Neueste Artikel> Wie gehe ich mit der Integrität der Nachricht um, wenn eine Signatur mit Hash_Final generiert wird?

Wie gehe ich mit der Integrität der Nachricht um, wenn eine Signatur mit Hash_Final generiert wird?

gitbox 2025-05-27

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.

1 ?? Was ist Hash_Final ?

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:

  1. Initialisieren Sie einen Hash -Kontext mit Hash_init .

  2. 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).

  3. 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.

2 ?? Codebeispiel: So generieren Sie eine Signatur

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.

3 ?? So sichern Sie die Integrität der Nachrichten

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.

4 ?? Praktischer Fall: Datei -Download -Überprüfung

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.