Aktueller Standort: Startseite> Neueste Artikel> Wie erzeugt ich mithilfe der Krypta -Funktion von PHP dynamisch Salzvorlagen für mehrere Algorithmen?

Wie erzeugt ich mithilfe der Krypta -Funktion von PHP dynamisch Salzvorlagen für mehrere Algorithmen?

M66 2025-06-11

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.

Grundlegende Verwendung von Kryptafunktionen

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

Salzformat, das verschiedenen Algorithmen entspricht

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.

Beispielfunktionen zum dynamischen Erzeugen von Salzvorlagen

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) . '$';
    }
}

Beispiel für die Nutzung

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

Zusätzliche Ratschläge

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