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.
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.
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).
Crypt () unterstützt mehrere Verschlüsselungsalgorithmen, und das von verschiedenen Algorithmen erforderliche Salzformat ist ebenfalls unterschiedlich. Hier sind einige gemeinsame Algorithmen und ihre Salzformate:
crypt('mypassword', 'rl');
Salz: zwei Zeichen (insgesamt 12 Bit)
Schwache Verschlüsselung, nicht empfohlen
crypt('mypassword', '$1$abc12345$');
Salzformat: $ 1 $ + 1-8 Zeichen
Algorithmus: Basierend auf MD5
Ausgabelänge: 34 Zeichen
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
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
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";
?>
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。";
}
?>
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.
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.