Position actuelle: Accueil> Derniers articles> Comment générer dynamiquement des modèles de sel pour plusieurs algorithmes en utilisant la fonction Crypt de PHP?

Comment générer dynamiquement des modèles de sel pour plusieurs algorithmes en utilisant la fonction Crypt de PHP?

M66 2025-06-11

Dans PHP, la fonction Crypt est une fonction classique pour le hachage du mot de passe. Il prend en charge une variété d'algorithmes de chiffrement, tels que DES, MD5, Blowfish, SHA-256 et SHA-512. L'utilisation d'un sel approprié améliore non seulement la sécurité du mot de passe, mais contrôle également la complexité des algorithmes de chiffrement et du hachage.

Cet article expliquera en détail comment générer dynamiquement des modèles de sel pour plusieurs algorithmes, afin que vous puissiez spécifier de manière flexible les algorithmes et les valeurs de sel lors de l'utilisation de fonctions cryptantes .

Utilisation de base des fonctions de la crypte

 $password = 'mypassword';
$salt = '$6$rounds=5000$usesomesillystring$';  // SHA-512 Exemple de sel
$hash = crypt($password, $salt);
echo $hash;

Dans l'exemple ci-dessus, 6 $ signifie que l'utilisation de l'algorithme SHA-512, Rounds = 5000 représente le nombre d'itérations de chiffrement, et la chaîne suivante est le corps de valeur de sel.

Format de sel correspondant à différents algorithmes

algorithme Préfixe de sel Longueur et description du sel
Des Pas de préfixe Sel à 2 caractères
Md5 1 $ Sel à 8 caractères
Flowfish 2a $ $ ou 2 $ $ Sel de 22 caractères (y compris les paramètres de version et de coût)
SHA-256 5 $ Rounds de paramètres facultatifs, corps de sel jusqu'à 16 caractères
SHA-512 6 $ Rounds de paramètres facultatifs, corps de sel jusqu'à 16 caractères

Après les comprendre, nous pouvons générer dynamiquement des modèles de sel appropriés en fonction de différents algorithmes.

Exemples de fonctions pour générer dynamiquement des modèles de sel

Voici un exemple de fonction PHP qui peut générer un modèle de sel dans le format correspondant en fonction du nom de l'algorithme d'entrée:

 function generateSalt($algorithm = 'sha512', $rounds = 5000) {
    // Fonction de génération de corps au sel aléatoire,La longueur est ajustée en fonction des limitations de l'algorithme
    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 Seulement avant le sel2personnage
            return substr(randomSalt(2), 0, 2);

        case 'md5':
            // MD5 Format de sel $1$salt$
            return '$1$' . randomSalt(8) . '$';

        case 'blowfish':
            // Blowfish Format $2y$cost$22charsalt
            $cost = 10;  // 2chiffres,Il est recommandé d&#39;être04arriver31entre
            $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) . '$';
    }
}

Exemple d'utilisation

 $password = 'my_secret_password';

// Algorithme de sélection
$algorithm = 'blowfish';

// Générer des modèles de sel correspondants
$salt = generateSalt($algorithm);

// Générer du hachage
$hash = crypt($password, $salt);

echo "algorithme: {$algorithm}\n";
echo "Modèle de sel: {$salt}\n";
echo "Générer du hachage: {$hash}\n";

De cette façon, vous pouvez avoir un contrôle très flexible des algorithmes et des paramètres de sel utilisés lors du chiffrement des mots de passe, améliorant la sécurité.

Conseils supplémentaires

  • À l'aide d'un schéma de hachage de mot de passe plus sécurisé, il est recommandé de considérer les fonctions de Password_hash et de mot de passe_vriefy de PHP, qui résument la complexité sous-jacente, utilisent des algorithmes forts par défaut et gérer automatiquement le sel.

  • Essayez d'éviter les paramètres d'épissage manuellement dans les chaînes de sel, et il est recommandé d'utiliser des fonctions de génération de nombres aléatoires fiables telles que Random_int .

  • Ajustez régulièrement les rondes (nombre d'itérations) selon la sécurité des besoins pour améliorer la capacité de résister à la fissuration par force brute.