Aktueller Standort: Startseite> Neueste Artikel> Hash_Final Wie kann man mit verschiedenen Datenformaten umgehen, wenn die Hash -Werte berechnet werden?

Hash_Final Wie kann man mit verschiedenen Datenformaten umgehen, wenn die Hash -Werte berechnet werden?

gitbox 2025-05-27

In PHP wird die Funktion von Hash_Final verwendet, um den letzten Schritt eines Hash -Kontextes (erstellt durch Hash_init ) und den berechneten Hash -Wert zurückzugeben. Es gehört zur Hash -Erweiterung von PHP und wird normalerweise mit Hash_init , Hash_Update , Hash_Update_Stream und Hash_Update_file verwendet.

Wenn wir also Hash_Final verwenden, um die Hash -Werte zu berechnen, wie werden unterschiedliche Datenformate (wie Zeichenfolgen, Binärdaten, Dateiströme usw.) behandelt? Dieser Artikel wird ausführlich erörtert.

Grundlegende Verwendung von Hash_Final

Schauen wir uns zuerst ein grundlegendes Beispiel an:

 <?php
$context = hash_init('sha256');
hash_update($context, 'Hello World');
$hash = hash_final($context);
echo $hash;
?>

Dieser Code-Snippet gibt den SHA-256-Hash-Wert der String Hello World (in Hexadezimal) aus.

Beachten:

  • Der zweite Parameter, der von Hash_Update empfangen wird, ist eine Zeichenfolge.

  • Egal welcher Typ Sie bereitstellen (solange es in eine Zeichenfolge konvertiert werden kann), wird es schließlich als Byte -Sequenz verarbeitet.

So verarbeiten Sie verschiedene Datenformate

1 ?? Saite

Wenn Sie in einer String (ob ASCII oder UTF-8-Codierung) übergeben, verarbeitet PHP sie direkt in Byte-Sequenzen.
Zum Beispiel:

 hash_update($context, "abc");  // Was ist mit dem Umgang mit '61 62 63' Drei Bytes

Hinweis: Multi-Byte-Zeichen (wie Chinesen) werden auch berechnet, indem Hash nach ihrer zugrunde liegenden Byte-Sequenz und nicht an der "Charakter" -Droschenheit eingeben.

2 ?? Binärdaten

Wenn Sie beispielsweise Binärdaten übergeben, wird ein binärer Stream, der über File_Get_Contents erhalten wird, auch direkt von Bytes gespeist:

 $data = file_get_contents('https://gitbox.net/image.png');
hash_update($context, $data);

Die $ -Daten hier können \ 0 (Null -Byte), hohes Byte usw. enthalten. PHP führt keine Filterung oder Flucht durch und tritt in die Hash -Berechnung ein, wie sie ist.

3 ?? Dateistrom

Wenn Sie Hash für große Dateien berechnen möchten, wird empfohlen, Hash_Update_Stream zu verwenden:

 $fp = fopen('https://gitbox.net/largefile.zip', 'rb');
$context = hash_init('sha256');
hash_update_stream($context, $fp);
$hash = hash_final($context);
fclose($fp);

Hier wird der Dateiinhalt in Stücken gelesen und in den Hash -Kontext eingespeist, um zu vermeiden, dass die gesamte Datei gleichzeitig in den Speicher geladen wird.

4 ?? Dateipfad

Wenn Sie Hash in einer Datei direkt berechnen möchten, können Sie Hash_file verwenden. Wenn Sie jedoch die Hash_* -Function -Familie verwenden möchten, benötigen Sie:

 $context = hash_init('sha256');
hash_update_file($context, 'https://gitbox.net/document.pdf');
$hash = hash_final($context);

Hash_update_file öffnet automatisch die Datei, liest ihren Inhalt und aktualisiert den Kontext.

Zusammenfassung

  • Hash_Final beendet nur die akkumulierten Daten.

  • Bevor die Daten in den Kontext ( Hash_Update , Hash_Update_Stream , Hash_Update_file ) eingeben, wurde in Byte -Sequenzen gelesen und kümmert sich nicht um den ursprünglichen "Datentyp".

  • Sie müssen sicherstellen, dass die Daten, die Sie übergeben, das sind, was Sie haben möchten (insbesondere Codierung oder binäre Sicherheitsprobleme).