Dans PHP, la fonction crypte () est un outil de cryptage de mot de passe traditionnel et puissant. Il met en œuvre un hachage unidirectionnel des mots de passe basés sur différents algorithmes de chiffrement (tels que DES, MD5, Blowfish, SHA-256, SHA-512, etc.), qui convient au stockage et à la vérification des mots de passe des utilisateurs. Cet article présentera en détail comment utiliser la fonction crypt () pour générer un mot de passe plus sécurisé et partager la meilleure configuration de sécurité pour aider à augmenter la force du mot de passe.
L'utilisation de base de la fonction crypte () est la suivante:
$hashed_password = crypt($password, $salt);
$ mot de passe est le mot de passe d'origine saisi par l'utilisateur.
$ Le sel est la valeur de sel utilisée pour contrôler la méthode de chiffrement et le résultat, qui détermine l'algorithme de hachage et le format de résultat.
Le format de valeur de sel affecte directement la sécurité du mot de passe. Les formats de valeur de sel soutenus par Crypt () comprennent:
DES (par défaut, la longueur de sel est de 2 caractères, une sécurité faible)
MD5 (Format de sel: 1 $ + 8 caractères sel)
Blowfish (Format de sel: 2A $ ou 2 $ $ + coût à deux chiffres + sel de 22 caractères)
SHA-256 (Format de sel: 5 $ + sel)
SHA-512 (Format de sel: 6 $ + sel)
La sécurité du stockage du mot de passe dépend non seulement de l'algorithme lui-même, mais aussi de la force du sel et de la complexité de l'algorithme:
La fonction du sel : empêche les attaques de table arc-en-ciel et garantit que le même mot de passe est chiffré différemment à chaque fois.
Force d'algorithme : des algorithmes plus complexes et des coûts de calcul plus élevés (facteur de travail) peuvent résister à la fissuration par force brute.
L'exemple suivant montre comment utiliser Crypt () en conjonction avec l'algorithme Blowfish ( 2 $ $ ) pour générer un mot de passe plus sûr:
<?php
function generateSecureHash($password) {
// générer22sel aléatoire un peu sûr
$salt = substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
// BlowfishParamètres de coût de l'algorithme,La portée est généralement04~31,défaut12Plus sûr
$cost = '12';
// Construire une chaîne de sel,Le format est $2y$coût$Sel
$blowfish_salt = sprintf('$2y$%02d$%s', $cost, $salt);
// générerHachage de mot de passe chiffré
return crypt($password, $blowfish_salt);
}
// test
$password = "MyS3cureP@ss!";
$hash = generateSecureHash($password);
echo "Hachage de mot de passe chiffré: " . $hash;
?>
Utilisez Random_Bytes () pour générer des sels aléatoires de haute intensité.
2 ans $ est utilisé pour représenter l'algorithme Blowfish, qui convient au stockage de mot de passe sécurisé.
Le paramètre de coût $ Cost détermine la complexité de l'algorithme. Plus le coût est élevé, plus il est sûr, mais plus le temps de calcul est long. 12 est la valeur recommandée pour équilibrer les performances et la sécurité.
Lors de la vérification du mot de passe, réincryptez le mot de passe entré par l'utilisateur avec le hachage stocké dans la base de données à l'aide de la fonction crypt () pour comparer si les résultats sont les mêmes:
<?php
function verifyPassword($password, $stored_hash) {
// utiliser存储的哈希中的Sel重新加密密码
$hash = crypt($password, $stored_hash);
// utiliserhash_equalsEmpêcher la comparaison de sécurité des attaques temporelles
return hash_equals($hash, $stored_hash);
}
// test验证
$input_password = "MyS3cureP@ss!";
if (verifyPassword($input_password, $hash)) {
echo "La vérification du mot de passe a réussi!";
} else {
echo "Mot de passe d'erreur!";
}
?>
Utilisez des sels aléatoires forts : évitez d'utiliser des sels fixes ou prévisibles.
Choisissez le bon algorithme : hiérarchisez Blowfish ( 2 $ $ ), SHA-256 ( 5 $ ) ou SHA-512 ( 6 $ ).
Ajustez les paramètres du coût : plus le coût est élevé, plus le calcul prend du temps, mais plus la sécurité est forte. Équilibre raisonnable.
Limiter les tentatives de mot de passe : Empêchez la fissuration par force brute.
Combiné avec la stratégie de complexité du mot de passe : la longueur forcée du mot de passe et la diversité des caractères.
Mettre à jour régulièrement les algorithmes et les paramètres de coût : à mesure que la puissance de calcul augmente, les normes de sécurité sont améliorées en temps opportun.
PHP Document officiel: https://www.m66.net/manual/zh/fonction.crypt.php