In PHP ist die Krypta -Funktion eine klassische Funktion für das Passworthashing. Es unterstützt eine Vielzahl von Verschlüsselungsalgorithmen wie DES, MD5, Blowfish, SHA-256 und SHA-512. Die Verwendung eines geeigneten Salzes verbessert nicht nur die Kennwortsicherheit, sondern steuert auch die Komplexität von Verschlüsselungsalgorithmen und Hashs.
In diesem Artikel wird detailliert erläutert, wie für mehrere Algorithmen dynamisch Salzvorlagen erzeugt werden, sodass Sie bei Verwendung von Krypta -Funktionen Algorithmen und Salzwerte flexibel angeben können.
$password = 'mypassword';
$salt = '$6$rounds=5000$usesomesillystring$'; // SHA-512 Beispiel Salz
$hash = crypt($password, $salt);
echo $hash;
Im obigen Beispiel bedeutet 6 $ $ den SHA-512-Algorithmus, Runden = 5000 repräsentiert die Anzahl der Verschlüsselungs-Iterationen, und die folgende Zeichenfolge ist der Salzwertkörper.
Algorithmus | Salzpräfix | Salzlänge und Beschreibung |
---|---|---|
Des | Kein Präfix | 2-Charakter-Salz |
MD5 | $ 1 $ | 8-Charakter-Salz |
Blowfish | $ 2A $ oder $ 2y $ | 22-Charakter-Salz (einschließlich Versions- und Kostenparameter) |
SHA-256 | $ 5 $ | Optionale Parameterrunden, Salzkörper bis zu 16 Zeichen |
SHA-512 | $ 6 $ | Optionale Parameterrunden, Salzkörper bis zu 16 Zeichen |
Nach dem Verständnis können wir dynamisch geeignete Salzvorlagen basierend auf verschiedenen Algorithmen erzeugen.
Hier ist ein Beispiel für eine PHP -Funktion, die im entsprechenden Format eine Salzvorlage erzeugen kann, die auf dem Namen Eingabealgorithmus basiert:
function generateSalt($algorithm = 'sha512', $rounds = 5000) {
// Zufällige Salzkörpergenerierungsfunktion,Die Länge wird gemäß Algorithmusbeschränkungen eingestellt
function randomSalt($length) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./';
$salt = '';
for ($i = 0; $i < $length; $i++) {
$salt .= $chars[random_int(0, strlen($chars) - 1)];
}
return $salt;
}
switch (strtolower($algorithm)) {
case 'des':
// DES Nur vor Salz2Charakter
return substr(randomSalt(2), 0, 2);
case 'md5':
// MD5 Salzformat $1$salt$
return '$1$' . randomSalt(8) . '$';
case 'blowfish':
// Blowfish Format $2y$cost$22charsalt
$cost = 10; // 2Ziffern,Es wird empfohlen, es zu sein04ankommen31zwischen
$costStr = str_pad($cost, 2, '0', STR_PAD_LEFT);
return '$2y$' . $costStr . '$' . randomSalt(22);
case 'sha256':
// SHA-256 Format $5$rounds=xxxx$salt$
return '$5$rounds=' . intval($rounds) . '$' . randomSalt(16) . '$';
case 'sha512':
default:
// SHA-512 Format $6$rounds=xxxx$salt$
return '$6$rounds=' . intval($rounds) . '$' . randomSalt(16) . '$';
}
}
$password = 'my_secret_password';
// Auswahlalgorithmus
$algorithm = 'blowfish';
// Entsprechende Salzvorlagen erzeugen
$salt = generateSalt($algorithm);
// Hash erzeugen
$hash = crypt($password, $salt);
echo "Algorithmus: {$algorithm}\n";
echo "Salzvorlage: {$salt}\n";
echo "Hash erzeugen: {$hash}\n";
Auf diese Weise können Sie eine sehr flexible Kontrolle über die Algorithmen und Salzparameter haben, die beim Verschlüsseln von Kennwörtern verwendet werden und die Sicherheit verbessern.
Mithilfe eines sichereren Kennworthashing - Schemas wird empfohlen, die integrierten Funktionen von PHP zu berücksichtigen, die die zugrunde liegende Komplexität zusammenfassen, standardmäßig starken Algorithmen verwenden und automatisch mit Salz umgehen.
Versuchen Sie, Parameter in Salzkästen manuell zu vermeiden, und es wird empfohlen, zuverlässige Funktionen zur Erzeugung von Zufallszahlen wie Random_int zu verwenden.
Passen Sie die Runden (Anzahl der Iterationen) regelmäßig an, um die Fähigkeit zu verbessern, Brute-Force-Rissbacken zu widerstehen.