In PHP ist die Crypt () -Funktion eine herkömmliche Methode zum Verschlingen von Kennwörtern. Es unterstützt mehrere Verschlüsselungsalgorithmen und ermöglicht spezifische Verschlüsselungsmechanismen, indem Salzwerte in verschiedenen Formaten bestehen. Obwohl in den letzten Jahren modernere APIs mit Passwort -Hashing -APIs (z. B. password_hash () ) empfohlen wurden, wird Crypt () in einigen alten Systemen immer noch häufig verwendet. Daher ist das Verständnis, wie das geeignete Algorithmus und das Salzwertformat für die Funktion "Crypt () ausgewählt werden sollen, der Schlüssel zur Gewährleistung der Sicherheits- und Systemkompatibilität.
Die Crypt () -Funktion verwendet den Algorithmus, der verwendet wird, um das Salzwertpräfix zu identifizieren. Im Folgenden finden Sie Mainstream -Algorithmen und ihre entsprechenden Salzwertformate:
DES (traditioneller Algorithmus)
Salzwertformat: 2 Zeichen (zum Beispiel: "xy")
Sicherheit: Sehr niedrig, nicht mehr empfohlen.
MD5
Salzwertformat: $ 1 $ + bis zu 8 Zeichen (zum Beispiel: $ 1 $ ABC12345 )
Sicherheit: Schwach, leicht zu brutal erzwungen zu werden.
Blowfish
Salzwertformat: $ 2y $ + 2-Bit Kostenfaktor + 22-Bit-Basis64-Codierung (zum Beispiel: $ 2y $ 10 $ ABCDEFGHIJKLMNOPQRSTUU )
Sicherheit: hoch, weit verbreitet.
Kompatibilität: Es wird empfohlen , $ 2y $ anstelle von 2 AA -$ zu verwenden, da $ 2y $ historische Sicherheitsprobleme behebt.
SHA-256 und SHA-512 (GLIBC)
Salzwertformat:
SHA-256: $ 5 $ + Optionale Runden Parameter + Salz (zum Beispiel: $ 5 $ Runden = 5000 $ MysaltValue )
SHA-512: $ 6 $ + optionale Runden Parameter + Salz (zum Beispiel: $ 6 $ MysaltValue )
Sicherheit: Hoch
Kompatibilität: verfügbar auf Plattformen, die von GLIBC (wie den meisten Linux -Systemen) unterstützt werden, jedoch nicht auf Windows.
Bei der Auswahl eines Verschlüsselungsalgorithmus sollten die folgenden Punkte berücksichtigt werden:
Sicherheitsanforderungen : Wenn das System Brute Force Cracking aus modernen Hardware widersetzen muss, wird empfohlen, Blowfish ( $ 2y $ ) oder SHA-512 ( $ 6 $ ) zu verwenden.
Übergreifende Kompatibilität : Wenn das System zwischen Linux und Windows migriert werden muss, sollte zuerst der Blowfish-Algorithmus verwendet werden, da die SHA-Variante unter Windows nicht kompatibel ist.
Berechnungskostenkontrolle : Blowfish unterstützt die Kostenparameter (2–31) und kann entsprechend der Serverleistung angepasst werden. Zum Beispiel bedeutet $ 2y $ 12 $ 2^12 Iterationen.
Der Salzwert wird verwendet, um zu verhindern, dass dasselbe Passwort denselben Hash erzeugt. Daher müssen die folgenden Eigenschaften sein:
Einzigartigkeit : Das Passwort jedes Benutzers sollte ein anderes Salz verwenden.
Unvorhersehbarkeit : Salz sollte unter Verwendung einer sicheren Pseudo-Random-Quelle erzeugt werden.
Probencode, verwendete Blowfish, um einen Hash mit Salz zu generieren:
function generateSalt($cost = 10) {
$salt = substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
return sprintf('$2y$%02d$%s$', $cost, $salt);
}
$password = 'MySecurePassword123';
$salt = generateSalt(12);
$hash = crypt($password, $salt);
echo "Das verschlüsselte Passwort ist: " . $hash;
Bei der Verwendung von CryPT () für die Passwortüberprüfung sollte die Benutzereingabe zusammen mit dem ursprünglichen Hash an Crypt () übergeben werden, z. B.:
function verifyPassword($password, $hash) {
return crypt($password, $hash) === $hash;
}
Dies stellt sicher, dass der Überprüfungsprozess denselben Algorithmus und Salzwerte verwendet.
Geben Sie keine Zeichenfolgen mit unbekannten Salzwerten manuell an und verwenden Sie die vom Programm automatisch generierten sicheren Salzwerte.
Vermeiden Sie die Verwendung von DES oder MD5, auch wenn sie noch unterstützt werden.
Bevorzugte Migration zu password_hash () und password_verify () werden diese Funktionen von PHP verwaltet und verarbeiten automatisch Algorithmen und Salzwerte, was den modernen Angriffen besser widerstehen kann.
Ein altes System spart Passwort, wenn ein Benutzer registriert:
$password = $_POST['password'];
$salt = generateSalt(12);
$hashed = crypt($password, $salt);
// halten $hashed Gehen Sie zur Datenbank
Überprüfen Sie das Passwort, wenn Sie sich anmelden:
$input = $_POST['password'];
$stored_hash = getPasswordFromDatabase(); // Angenommen, es wurde aus der Datenbank abgerufen
if (verifyPassword($input, $stored_hash)) {
echo "Erfolgreich anmelden";
} else {
echo "Fehlerkennwort";
}
Obwohl die Crypt () -Funktion nicht mehr das bevorzugte Werkzeug im modernen PHP ist, ist es dennoch wichtig, ihre Algorithmen und Salzwertmechanismen zu verstehen, insbesondere bei der Aufrechterhaltung alter Systeme. Es wird empfohlen, den Algorithmus zum Blowfish ( 2y $ ) mit sicher generierten Salzwerten zu verwenden, um ein Gleichgewicht zwischen Kompatibilität und Sicherheit zu gewährleisten. Es wird auch empfohlen, das System auf lange Sicht auf password_hash () zu übergehen, eine modernere und sichere Lösung.