Position actuelle: Accueil> Derniers articles> L'utilisation de la mauvaise valeur de sel entraîne la vérification du mot de passe

L'utilisation de la mauvaise valeur de sel entraîne la vérification du mot de passe

M66 2025-05-20

Dans PHP, la fonction crypte () est souvent utilisée pour crypter les mots de passe. Il peut prendre en charge une variété d'algorithmes de hachage, tels que Standard DES, MD5, SHA-256 et SHA-512, et son comportement dépend de la "valeur de sel" entrante. La valeur de sel augmente non seulement la complexité du mot de passe, mais détermine également la méthode et le résultat du hachage. Une fois que la valeur de sel est incorrecte, même si l'utilisateur entre le mot de passe d'origine correct, il ne peut pas transmettre la vérification.

Utilisation de base de la fonction crypte ()

La syntaxe de base de crypte () est la suivante:

 $hashed_password = crypt('Mot de passe d'origine', 'Valeur de sel');

Pendant la vérification, le mot de passe entré par l'utilisateur est généralement réincarré à l'aide du hachage précédemment stocké comme valeur de sel:

 if (crypt($input_password, $stored_hash) === $stored_hash) {
    // Mot de passe correct
}

Notez que le point clé ici est: le hachage lui-même est passé dans le cadre de la valeur de sel pour garantir que l'utilisation d'algorithmes et de valeurs de sel complètement cohérents.

Le rôle de la valeur de sel

Il existe deux fonctions principales de valeur de sel:

  1. Empêchez l'attaque de la table arc-en-ciel: même si deux utilisateurs utilisent le même mot de passe, leurs résultats de hachage seront différents après avoir ajouté différentes valeurs de sel.

  2. Dites Crypt () quel algorithme de chiffrement et ses paramètres à utiliser.

Par exemple, la valeur de sel suivante spécifie l'utilisation de l'algorithme SHA-512 et d'itération 5000 fois:

 $salt = '$6$rounds=5000$usesomesillystringforsalt$';

Si vous essayez de réincrirner le même mot de passe avec différentes valeurs de sel (même si une seule est différente), les résultats seront complètement différents. C'est exactement la caractéristique de la fonction de hachage: un léger changement entraînera une énorme différence dans les résultats de sortie .

Conséquences de l'utilisation de mauvaises valeurs de sel

Imaginez un scénario:

 $original_hash = crypt('mySecretPassword', '$6$rounds=5000$m66.net$');

Lorsque l'utilisateur se connecte à nouveau, le programme vérifie comme suit:

 if (crypt('mySecretPassword', '$6$rounds=5000$wrongdomain.com$') === $original_hash) {
    echo 'Mot de passe correct';
} else {
    echo 'Mot de passe d'erreur';
}

Bien que l'utilisateur ait saisi le mot de passe correct, Crypt () générera un hachage complètement différent en raison de différentes valeurs de sel, provoquant l'échec de la vérification.

C'est comme si vous utilisiez la même recette (mot de passe), mais en utilisant différents ingrédients (sel), le plat (hachage) qui finit par fabriquer est naturellement différent.

Erreurs et meilleures pratiques communes

Mauvaise pratique:

  • Générez une nouvelle valeur de sel aléatoire à chaque fois que vous le vérifiez.

  • La valeur de hachage d'origine n'est pas utilisée comme valeur de sel pendant la vérification.

  • Tronquer ou modifier manuellement les valeurs de hachage stockées.

Façon correcte de le faire:

  • En utilisant des API de haut niveau telles que Password_Hash () et Password_verify () , ils gèrent automatiquement les valeurs de sel et les algorithmes.

  • Si vous utilisez Crypt () , le hachage d'origine est toujours utilisé comme valeur de sel lors de la validation.