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