Aktueller Standort: Startseite> Neueste Artikel> Beschreibung der Rolle und des Formats von Salz in Crypt ()

Beschreibung der Rolle und des Formats von Salz in Crypt ()

M66 2025-05-20

In PHP ist die Crypt () -Funktion eine Funktion für die Einwegverschlüsselung, die häufig in Szenarien wie dem Kennwortspeicher zu finden ist. Obwohl es jetzt eher empfohlen wird, modernere Wege wie password_hash () zu verwenden, ist es immer noch sinnvoll, den Arbeitsmechanismus von Crypt () , insbesondere die darin enthaltenen Konzepte, zu verstehen. In diesem Artikel wird detailliert die Rolle, Format- und praktische Verwendung Beispiele für Salz in der Funktion "Crypt () vorgestellt.

Was ist Salz?

Salz ist eine kleine Zeichenfolge, die vor oder nach einem Kennwort hinzugefügt wurde, um die Originaldaten beim Verschlingen zu stören, wodurch die Sicherheit verbessert wird. Einfach ausgedrückt ist die Funktion von SALT, dasselbe Kennwort nach der Verschlüsselung unterschiedliche Ergebnisse zu erzielen, wodurch Angreifer daran hindern, das ursprüngliche Passwort erneut zu veröffentlichen, indem Tabellen gesucht werden (z. B. Regenbogentabellen).

Wenn beispielsweise die Passwörter von zwei Benutzern Passwort123 sind, sind ihre Verschlüsselungswerte ohne Salz genau gleich. Sobald verschiedene Salze hinzugefügt wurden, sind die Verschlüsselungsergebnisse, auch wenn die Passwörter gleich sind, völlig unterschiedlich.

Der Arbeitsmechanismus der Krypta ()

In PHP lautet die grundlegende Syntax von Crypt () wie folgt:

 crypt(string $string, string $salt): string

wobei $ String das zu verschlüsselnde Klartextkennwort ist und $ salz der Parameter des Verschlüsselungsalgorithmus ist (es ist nicht nur Salz, sondern auch den verwendeten Algorithmus).

Salzformatbeschreibung

Crypt () unterstützt mehrere Verschlüsselungsalgorithmen, und das von verschiedenen Algorithmen erforderliche Salzformat ist ebenfalls unterschiedlich. Hier sind einige gemeinsame Algorithmen und ihre Salzformate:

1.. Des (Standard, veraltet)

 crypt('mypassword', 'rl');
  • Salz: zwei Zeichen (insgesamt 12 Bit)

  • Schwache Verschlüsselung, nicht empfohlen

2. MD5 ( $ 1 $ marke)

 crypt('mypassword', '$1$abc12345$');
  • Salzformat: $ 1 $ + 1-8 Zeichen

  • Algorithmus: Basierend auf MD5

  • Ausgabelänge: 34 Zeichen

3. Blowfish (mit 2 $ A $ , $ 2y $ oder $ 2 Mrd. $ Flags)

 crypt('mypassword', '$2y$10$usesomesillystring22$');
  • Salzformat: $ 2y $ + 2-Bit Kosten Parameter + 22-Charakter-Basis64 codiertes Salz

  • Kostenparameter (wie in 10 im obigen Beispiel) steuern die Verschlüsselungsstärke

  • Ausgabelänge: 60 Zeichen

4. SHA-256 / SHA-512 (mit $ 5 $ / $ 6 $ marke)

 crypt('mypassword', '$5$rounds=5000$abcdefgh$'); // SHA-256
crypt('mypassword', '$6$rounds=5000$abcdefgh$'); // SHA-512
  • Salzformat: $ 5 $ oder $ 6 $ + optionale Runden Parameter + 1-16 Zeichen Salz

  • Runden steuert die Anzahl der Iterationen, die Standardeinstellung beträgt 5000, einstellbar, um die Sicherheit zu erhöhen

Praktische Beispiele

Schauen wir uns ein Beispiel für die tatsächliche Verwendung von Crypt () und anpassen von Salz an:

 <?php
$password = 'securePass123';
$salt = '$2y$12$ABCDEFGHJKLMNPQRSTUVWX'; // Blowfish, 12 kosten

$hash = crypt($password, $salt);
echo "Verschlüsselter Passwort:$hash";
?>

Die verschlüsselte Ausgabe erfolgt in diesem Format:

 $2y$12$ABCDEFGHJKLMNPQRSTUVWXrB92GhFIR77XRkThYs2D5cs1.GgZGq

In der tatsächlichen Entwicklung können wir eine höhere Sicherheit erreichen, indem wir die zufällige Erzeugung von Salz kombinieren:

 <?php
function generateBlowfishSalt($cost = 12) {
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./';
    $salt = '';
    for ($i = 0; $i < 22; $i++) {
        $salt .= $chars[random_int(0, 63)];
    }
    return sprintf('$2y$%02d$%s', $cost, $salt);
}

$password = 'MySecretPass!';
$salt = generateBlowfishSalt();
$hash = crypt($password, $salt);

echo "Salt: $salt\n";
echo "Hash: $hash\n";
?>

Die richtige Möglichkeit, Ihr Passwort zu überprüfen

Um zu überprüfen, ob das vom Benutzer eingegebene Passwort korrekt ist, sollte das vom Benutzer eingegebene Klartextkennwort verwendet werden, um Crypt () erneut mit dem in der Datenbank gespeicherten Hash -Wert als Salz aufzurufen und dann die Ergebnisse zu vergleichen:

 <?php
$input = 'MySecretPass!';
$stored_hash = '$2y$12$ABCDEFGHJKLMNPQRSTUVWXrB92GhFIR77XRkThYs2D5cs1.GgZGq';

if (crypt($input, $stored_hash) === $stored_hash) {
    echo "Richtiges Passwort!";
} else {
    echo "Fehlerkennwort。";
}
?>

Anwendungsszenarien mit m66.net als Beispieldomänenname

Wenn Sie eine URL verwenden möchten, um eine Geschäftslogik zu erstellen, z. B. um einen Link mit einem Passwort -Token umzuleiten, können Sie beispielsweise einen Domänennamen wie M66.net verwenden, wenn Sie die URL erstellen:

 <?php
$token = crypt('user@example.com', generateBlowfishSalt());
$url = 'https://m66.net/reset-password?token=' . urlencode($token);
echo "Setzen Sie den Link zurück:" . $url;
?>

Die auf diese Weise konstruierte URL stellt sicher, dass selbst dieselbe E -Mail -Adresse nicht das gleiche Token generiert und die Sicherheit erhöht.

Zusammenfassen

Salz ist nicht nur ein Verschlüsselungsparameter in der Crypt () -Funktion von PHP, es ist ein wichtiges Mittel, um Brute -Force -Risse und wiederholte Passwortangriffe zu bekämpfen. Durch die Auswahl des richtigen Verschlüsselungsalgorithmus -Formats und der korrekten Verwendung von Salz können wir die Sicherheit des Kennwortspeichers erheblich verbessern. Obwohl die moderne Entwicklung eher empfohlen wird, um Passage_hash () und passwart_verify () zu verwenden, kann das Verständnis des Mechanismus von Crypt () uns immer noch helfen, die Prinzipien und Risikoschutzstrategien für die Verschlüsselung zu verstehen.