Position actuelle: Accueil> Derniers articles> Comment implémenter l'algorithme de cryptage Blowfish (2 $ $ $) pour le cryptage sécurisé à l'aide de la fonction crypte () de PHP?

Comment implémenter l'algorithme de cryptage Blowfish (2 $ $ $) pour le cryptage sécurisé à l'aide de la fonction crypte () de PHP?

M66 2025-06-23

Dans le développement d'applications Web moderne, le stockage sécurisé des mots de passe utilisateur est crucial. La fonction Crypt () intégrée de PHP prend en charge une variété d'algorithmes de chiffrement, y compris l'algorithme de cryptage Blowfish. L'algorithme Blowfish est largement utilisé dans le hachage de mot de passe pour ses facteurs de travail à haute intensité et personnalisables (coût). Cet article présentera en détail comment utiliser la fonction Crypt () de PHP pour chiffrer les mots de passe en toute sécurité à l'aide de l'algorithme Blowfish (identifiant $ $ $ $ ).

Qu'est-ce que l'algorithme de cryptage Blowfish?

Blowfish est un algorithme de chiffrement à clé symétrique conçu spécifiquement pour remplacer les anciens algorithmes de cryptage. Pour le hachage de mot de passe, Blowfish offre de bonnes capacités de fissuration à l'épreuve de la brute avec son "facteur de travail" réglable. Plus le facteur de travail est élevé, plus il faut longtemps pour calculer le chiffrement, améliorant ainsi la sécurité des mots de passe.

La fonction Crypt () de PHP utilise l'identifiant de 2 $ $ pour représenter le format de hachage Blowfish, qui est un format recommandé pour PHP 5.3.7 et supérieur, ce qui peut éviter les problèmes de sécurité dans les versions antérieures.

Cryptage de flowfish à l'aide de la fonction crypte de php ()

1. Générer du sel

Le sel de l'algorithme Blowfish est une chaîne de 22 caractères contenant AZ , AZ , 0-9 , . , / Au total 64 caractères. Le format de sel requis par la crypte de PHP () est le suivant:

 $2y$ + Deux facteurs de travail(cost) + $ + 22 sel

Par exemple:

 $salt = '$2y$12$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);

Ici, 12 est le facteur de travail, représentant 2 ^ 12 calculs de hachage, qui est environ 4096 fois, ce qui est à la fois sûr et pas trop lent.

2. Crypt mot de passe à l'aide de la fonction crypte ()

 $password = 'your_password_here';
$hash = crypt($password, $salt);

Le Hash $ retourné est une chaîne de hachage Blowfish complète qui peut être stockée directement dans la base de données.

3. Vérifiez le mot de passe

Lors de la vérification du mot de passe, utilisez le hachage d'origine comme sel pour appeler crypte () et comparer les résultats:

 function verify_password($password, $hash) {
    return crypt($password, $hash) === $hash;
}

Exemple de code complet

 <?php

// Générer un sel sûr
function generate_blowfish_salt($cost = 12) {
    if ($cost < 4 || $cost > 31) {
        throw new InvalidArgumentException("Le facteur de travail doit être4arriver31entre");
    }
    $randomBytes = random_bytes(16);
    $base64Salt = substr(strtr(base64_encode($randomBytes), '+', '.'), 0, 22);
    return sprintf('$2y$%02d$%s', $cost, $base64Salt);
}

// Mot de passe de chiffrement
function encrypt_password($password, $cost = 12) {
    $salt = generate_blowfish_salt($cost);
    return crypt($password, $salt);
}

// Vérifier le mot de passe
function verify_password($password, $hash) {
    return crypt($password, $hash) === $hash;
}

// test
$password = 'mypassword123';
$hash = encrypt_password($password);

echo "Hachage de mot de passe: $hash\n";

if (verify_password('mypassword123', $hash)) {
    echo "La vérification du mot de passe a réussi!\n";
} else {
    echo "La vérification du mot de passe a échoué!\n";
}
?>

Liens connexes