Aktueller Standort: Startseite> Neueste Artikel> Methoden zum Vergleichen von Hash -Werten mithilfe von Hash_Final und Hash_Equals

Methoden zum Vergleichen von Hash -Werten mithilfe von Hash_Final und Hash_Equals

gitbox 2025-05-29

Hash_Final ist eine Funktion in PHP, um den endgültigen Hash -Wert aus dem Hash -Kontext zu erhalten. Normalerweise wird Hash_Final mit Hash_init- und Hash_Update -Funktionen verwendet, um die Hash -Werte schrittweise zu erstellen. Der durch Hash_Final generierte Hash -Wert ist unveränderlich.

Hash_Final -Funktionssyntax:

 string hash_final ( resource $context [, bool $raw_output = false ] )
  • $ context : Hash -Kontext, der durch Funktionen wie Hash_init und Hash_Update erstellt wurde.

  • $ raw_output : Wenn wahr , werden die ursprünglichen Binärdaten zurückgegeben. Wenn falsch (Standard), wird die hexadezimale Zeichenfolge zurückgegeben.

Beispiel:

 <?php
$data = "Hello, World!";
$context = hash_init('sha256');
hash_update($context, $data);
$hash = hash_final($context);

echo "Hash value: " . $hash;
?>

Ausgangsergebnis:

 Hash value: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2

In diesem Beispiel verwenden wir Hash_init , um einen SHA-256-Hash-Kontext zu initialisieren, Hash_Update zu verwenden, um die Hash-Daten zu aktualisieren und den endgültigen Hash-Wert über Hash_Final zu erhalten.

2. Einführung in die Funktion Hash_equals

Die Funktion von Hash_equals ist eine Funktion in PHP, mit der zwei Hash -Werte sicher verglichen werden. Es ist ein wichtiges Werkzeug, um Zeitangriffe zu verhindern. In Abwesenheit von Hash_Equals kann ein einfacher Vergleich des Operator -Vergleichs aufgrund unterschiedlicher Stringlängen zu zeitlicher Leckage führen, die von Hackern genutzt werden können, um über bestimmte Informationen zu spekulieren.

Hash_Equals stellt sicher, dass dieselbe Zeit in jedem Fall konsumiert wird, indem die Hash -Werte zweier Zeichenfolgen verglichen werden, wodurch Zeitangriffe vermieden werden.

Hash_equals Funktionssyntax:

 bool hash_equals ( string $known_string , string $user_string )
  • $ bekannte_string : ein bekannter Hash -Wert (normalerweise ein in der Datenbank gespeicherter Hash -Wert).

  • $ user_string : Der vom Benutzer eingegebene Hash -Wert.

Beispiel:

 <?php
$stored_hash = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2";
$user_input = "Hello, World!";

if (hash_equals($stored_hash, hash('sha256', $user_input))) {
    echo "The hashes match.";
} else {
    echo "The hashes do not match.";
}
?>

Ausgangsergebnis:

 The hashes match.

In diesem Beispiel wird Hash_equals verwendet, um den gespeicherten Hash -Wert mit dem Hash -Wert der Benutzereingabe sicher zu vergleichen. Wenn die beiden Hashes gleich sind, bedeutet dies, dass der Eingang korrekt ist.

3. Verwenden Sie Hash_Final und Hash_Equals in Kombination

Normalerweise verwenden wir Hash_Final und Hash_Equals zusammen, um sicherzustellen, dass die Hash -Werte sicher berechnet und sicher verglichen werden. Zum Beispiel verwenden wir beim Umgang mit der Passwortüberprüfung zunächst Hash_Final , um einen Hash -Wert des Kennworts zu erstellen und dann Hash_equals sicher zu vergleichen, um das vom Benutzer eingegebene Kennwort mit dem in der Datenbank gespeicherten Hash -Wert sicher zu vergleichen.

Vollständiges Beispiel:

 <?php
// Angenommen, das vom Benutzer eingereichte Passwort
$user_input_password = "user_password123";

// In der Datenbank gespeicherter Passwort -Hash(Im Beispiel Hard Code)
$stored_password_hash = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2";

// passieren hash_final Berechnen Sie den Hash -Wert des Eingabekennworts
$context = hash_init('sha256');
hash_update($context, $user_input_password);
$user_input_hash = hash_final($context);

// verwenden hash_equals Vergleichen Sie sicher Passwort -Hash -Werte sicher
if (hash_equals($stored_password_hash, $user_input_hash)) {
    echo "Password is correct.";
} else {
    echo "Password is incorrect.";
}
?>

Ausgangsergebnis:

 Password is correct.

In diesem Beispiel verwenden wir Hash_Final , um den Hash -Wert des Benutzerkennworts zu berechnen und ihn dann mit dem gespeicherten Hash -Wert über Hash_Equals zu vergleichen. Auf diese Weise gewährleisten wir die Sicherheit von Hash -Vergleiche und verhindern mögliche Zeitangriffe.