Aktueller Standort: Startseite> Neueste Artikel> Wie extrahiere und verifiziere ich den Salzteil in der Crypt () -Funktion von PHP mit Substr ()?

Wie extrahiere und verifiziere ich den Salzteil in der Crypt () -Funktion von PHP mit Substr ()?

M66 2025-07-20

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.

Was ist Salz?

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

Wie man Salz mit substr () extrahiert

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 $

Salzprobencode mit substr () extrahieren

 <?php
$hash = crypt('password', '$1$abcdefgh$');

// Die Länge des extrahierten Salzes ist12Charaktere
$salt = substr($hash, 0, 12);

echo "Das extrahierte Salz ist: " . $salt;
?>

Stellen Sie sicher, dass Salz dem erwarteten Format erfüllt

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";
}
?>

Umfassende Beispiele

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";
}
?>

Zusammenfassen

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