In PHP handelt es sich bei der Crypt () -Funktion ein häufig verwendetes Kennwort -Hashing -Tool, das das angegebene "Salz" verwendet, um die Sicherheit von Kennwörtern zu verbessern. Die Funktion von Salz besteht darin, die Zufälligkeit des Hashings zu erhöhen und Regenbogentischangriffe zu verhindern. Das Verständnis des Extrahierens und Überprüfens von Salz aus Hashes, die von der Crypt () -Funktion erzeugt werden, ist ein wichtiger Bestandteil der Beherrschung der Sicherheit der Kennwortverarbeitung.
In diesem Artikel wird vorgestellt, wie das Salzteil aus dem Renditewert von Crypt () unter Verwendung von PHPs Substr () -Funktion extrahiert und eine einfache Überprüfung durchgeführt wird.
Salz ist eine zufällige Zeichenfolge, die beim Verschlüsselung mit dem ursprünglichen Passwort kombiniert wird. Es wird sichergestellt, dass die generierten Hash -Werte auch dann unterschiedlich sind, wenn die Passwörter beider Benutzer gleich sind.
In der Crypt () -Funktion variieren das Format und die Salzlänge nach dem Verschlüsselungsalgorithmus beispielsweise:
DES : 2 Zeichen von Salz
MD5 : Beginnen Sie mit $ 1 $ , gefolgt von einem Salz von bis zu 8 Zeichen
Blowfish : Starten
Angenommen, Sie verwenden den MD5 -Algorithmus, sein Salzformat lautet wie folgt:
$1$ + 8Charakter Salz
Zum Beispiel ein typischer MD5 -Hash -Wert:
$hash = crypt('password', '$1$abcdefgh$');
Der zurückgegebene Hash könnte sein:
$1$abcdefgh$ZxR0LnxZPbQ5Cj7JlYiGp0
Salz ist die ersten 12 Zeichen: $ 1 $ ABCDEFGH $
<?php
$hash = crypt('password', '$1$abcdefgh$');
// Die Länge des extrahierten Salzes ist12Charaktere
$salt = substr($hash, 0, 12);
echo "Das extrahierte Salz ist: " . $salt;
?>
Wir können überprüfen, ob das extrahierte Salz die Erwartungen durch reguläre Ausdrücke erfüllt. Zum Beispiel der reguläre Ausdruck von MD5 -Salz:
/^(\$1\$[\.\/0-9a-zA-Z]{1,8}\$)$/
Beispielcode:
<?php
$salt = substr($hash, 0, 12);
if (preg_match('/^\$1\$[\.\/0-9a-zA-Z]{1,8}\$/', $salt)) {
echo "Richtiges Salzformat";
} else {
echo "Falsches Salzformat";
}
?>
Hier ist ein vollständiges Beispiel, das das Erzeugen von Hash, das Extrahieren von Salz und das Überprüfen von Salz beinhaltet:
<?php
$password = 'mypassword';
// verwenden MD5 Der Algorithmus erzeugt Salz($1$ + 8Zufällige Zeichen + $)
$salt = '$1$' . substr(strtr(base64_encode(random_bytes(6)), '+', '.'), 0, 8) . '$';
// Hash erzeugen
$hash = crypt($password, $salt);
echo "Erzeugte Hash: $hash\n";
// Salz aus Hash extrahieren
$extracted_salt = substr($hash, 0, 12);
echo "Extrahiertes Salz: $extracted_salt\n";
// Überprüfen Sie das Salzformat
if (preg_match('/^\$1\$[\.\/0-9a-zA-Z]{1,8}\$/', $extracted_salt)) {
echo "Salzformatüberprüfung bestanden\n";
} else {
echo "Die Verifizierung des Salzformates ist fehlgeschlagen\n";
}
?>
Das Salzformat der Crypt () -Funktion hängt mit dem Verschlüsselungsalgorithmus mit unterschiedlichen Längen und Strukturen zusammen.
Verwenden Sie Substr () , um das Salzteil leicht aus dem Hash zu extrahieren.
Das Überprüfen des Salzformats mit regelmäßigen Ausdrücken kann sicherstellen, dass das Salz den Anforderungen des Verschlüsselungsalgorithmus entspricht und die Sicherheit verbessert.