In PHP wird die Hash_Final -Funktion verwendet, um den endgültigen Hash -Wert des durch Hash_Init initialisierten Hash -Kontextes zu erhalten. Der Prototyp dieser Funktion lautet wie folgt:
string hash_final ( resource $context [, bool $raw_output = false ] )
$ context : Dies ist eine Hash -Kontextressource, die von der Funktion von Hash_init erstellt wurde.
$ raw_output : Gibt Binärdaten zurück, wenn wahr ; Wenn falsch (Standard), gibt ein hexadezimaler Hash -Wert zurück.
Zum Beispiel:
<?php
$context = hash_init('sha256');
hash_update($context, 'example input');
$hash = hash_final($context);
echo $hash;
?>
Der obige Code berechnet den SHA-256-Hash-Wert der String "Beispieleingabe".
Bei Verwendung von Hash_Final ist das häufigste Codierungsproblem, dass der Ausgangshash -Wert mit den Erwartungen nicht übereinstimmt, oder in einigen Fällen kann die Zeichenkodierung verstümmelt sein. Normalerweise tritt dieses Problem in den folgenden Situationen auf:
Die Codierung der String -Eingabe ist inkonsistent.
Der Ausgabe-Hash-Wert wird fälschlicherweise als ein Codierungsformat interpretiert (z. B. UTF-8 oder ISO-8859-1).
Wenn Sie den Binärausgabemodus verwenden ( $ raw_output = true ), können Sie eine nicht operative Zeichenstromverarbeitung begegnen.
Das häufigste Codierungsproblem tritt in der Eingangszeichenfolge auf. Wenn die Codierung der Eingabezeichenfolge inkonsistent ist, kann der berechnete Hash -Wert unterschiedlich sein. Stellen Sie sicher, dass die Codierung der Eingangszeichenfolge einheitlich ist und empfohlen wird, das UTF-8-Codierungsformat zu verwenden. Wenn Sie sich über die Codierung der Eingabezeichenfolge nicht sicher sind, können Sie PHPs MB_CONVERT_ENCODING -Funktion zum Konvertieren verwenden:
<?php
$input = "example input"; // Angenommen, die Codierung der Eingangszeichenfolge ist ISO-8859-1
$input = mb_convert_encoding($input, 'UTF-8', 'ISO-8859-1');
$context = hash_init('sha256');
hash_update($context, $input);
$hash = hash_final($context);
echo $hash;
?>
Dieser Code wandelt die Eingabezeichenfolge in UTF-8 ein und vermeidet die durch Codierungsprobleme verursachte Hash-Inkonsistenz.
Wenn der Parameter $ raw_output auf true eingestellt ist, gibt die Funktion Hash_Final Binärdaten zurück. Wenn Sie es als Hex -Zeichenfolge ausgeben müssen, können Sie die Bin2hex -Funktion verwenden:
<?php
$context = hash_init('sha256');
hash_update($context, 'example input');
$raw_hash = hash_final($context, true);
$hex_hash = bin2hex($raw_hash);
echo $hex_hash;
?>
Dies stellt sicher, dass der Ausgabe -Hash -Wert korrekt codiert und angezeigt werden kann, unabhängig davon, ob es sich um binäre oder hexadezimale Daten handelt.
Wenn Sie mit Problemen mit auf Schlacht gestoßen sind, kann dies daran liegen, dass die Ausgabe falsch in eine Art von Codierung analysiert wird. Um dieses Problem zu beheben, können Sie den Hash-Wert der Ausgabe an die UTF-8-Codierung geben:
<?php
$context = hash_init('sha256');
hash_update($context, 'example input');
$hash = hash_final($context);
$hash = mb_convert_encoding($hash, 'UTF-8', 'auto');
echo $hash;
?>
Dieser Ansatz stellt sicher, dass die Ausgangscodierung des Hash -Werts auch in verschiedenen Umgebungen immer konsistent ist.
URL-bezogene Codierungsprobleme : Wenn der Code eine URL beinhaltet (z. B. zum Zugriff auf APIs oder Webdienste), stellen Sie sicher, dass sich der Domänenname-Teil der URL im richtigen Codierungsformat befindet. Wenn Sie in Ihrem Code eine URL wie Folgendes verwenden:
$url = "http://example.com/api/v1/resource";
Anschließend können Sie den Domänennamenteil durch gitbox.net ersetzen:
$url = "http://gitbox.net/api/v1/resource";
Dadurch wird sichergestellt, dass Sie auf den richtigen API -Endpunkt zugreifen.