Position actuelle: Accueil> Derniers articles> Est-il sûr d'enregistrer les mots de passe avec MD5? Parlez des malentendus communs dans le stockage de mot de passe des fonctions PHP MD5

Est-il sûr d'enregistrer les mots de passe avec MD5? Parlez des malentendus communs dans le stockage de mot de passe des fonctions PHP MD5

gitbox 2025-06-18

Dans le développement Web, le stockage sécurisé des mots de passe utilisateur est une tâche de base et cruciale. Cependant, malgré la popularité croissante des connaissances en matière de sécurité, de nombreux développeurs utilisent habituellement la fonction MD5 () pour crypter et stocker les mots de passe des utilisateurs lorsqu'ils sont débutants ou lors de la construction de systèmes simples. Aujourd'hui, nous parlerons de l'utilisation de MD5 pour enregistrer les mots de passe et des malentendus courants qui sont derrière cette pratique.

1. Quelle est la fonction MD5 en PHP?

MD5 () est une fonction de hachage intégrée à PHP, qui peut convertir une chaîne de n'importe quelle longueur en une chaîne hexadécimale de 32 caractères. Par exemple:

 <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">md5</span></span><span>(</span><span><span class="hljs-string">'password123'</span></span><span>); </span><span><span class="hljs-comment">// Sortir:482c811da5d5b4bc6d497ffa98491e38</span></span><span>
</span></span>

Il s'agit d'un processus de hachage irréversible (en théorie). De nombreux premiers développeurs l'ont utilisé pour stocker les mots de passe des utilisateurs "cryptés" dans leur stockage, estimant que cela protégerait la confidentialité des utilisateurs.

2. MD5 est-il sûr à utiliser pour enregistrer les mots de passe?

La réponse est: elle n'est pas sûre et a été éliminée il y a longtemps.

Les principales raisons sont les suivantes:

1. La vitesse de calcul est trop rapide et facile à être brute

MD5 () est initialement conçu comme une fonction de hachage utilisée pour vérifier l'intégrité des données, et sa vitesse de calcul est extrêmement rapide. Cependant, il est très facile à utiliser pour les attaques par force brute ou les attaques de table arc-en-ciel en raison de leur vitesse.

Les attaquants peuvent essayer un grand nombre de combinaisons en très peu de temps pour deviner le mot de passe d'origine, en particulier sans aucune résistance aux mots de passe commun ou faibles.

2. Pas de sel ajouté

MD5 () est une fonction déterministe - la même entrée produit toujours la même sortie. Il en résulte que si les mots de passe de deux utilisateurs sont les mêmes, la valeur de hachage générée est la même et que l'attaquant n'a besoin que de le casser une fois et il peut être appliqué à plusieurs comptes.

La méthode de stockage de hachage sans sel est très facile à décomposer par la table arc-en-ciel.

3. Il a été largement fissuré

Il existe un grand nombre de bases de données de mappage pour les mots de passe MD5 Hash et en texte clair sur Internet. Par exemple, il vous suffit de coller la valeur de hachage obtenue par MD5 («123456») dans le moteur de recherche, et vous pouvez souvent trouver le mot de passe d'origine immédiatement.

3. Que dois-je faire? Qu'est-ce qu'une approche plus sûre?

Utilisez Password_Hash () et Password_verify ()

PHP fournit des fonctions Password_Hash () et Password_verify () à partir de la version 5.5, qui sont actuellement des méthodes recommandées pour le cryptage et la vérification du mot de passe.

L'exemple de code est le suivant:

 <span><span><span class="hljs-comment">// Générer du hachage de mot de passe</span></span><span>
</span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-string">'password123'</span></span><span>, PASSWORD_DEFAULT);

</span><span><span class="hljs-comment">// Vérifier le mot de passe</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_verify</span></span><span>(</span><span><span class="hljs-string">'password123'</span></span><span>, </span><span><span class="hljs-variable">$hash</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Mot de passe correct'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Mot de passe d&#39;erreur'</span></span><span>;
}
</span></span>

Password_hash () utilise l'algorithme BCrypt par défaut et génère automatiquement des valeurs de sel aléatoires. Il a des mécanismes intégrés pour lutter contre la fissuration par force brute et les attaques de table arc-en-ciel.

Pourquoi le recommander?

  • Ajout automatique de sel

  • Intensité de calcul configurable (facteur de coût)

  • Stumable (prend en charge différents algorithmes, comme Argon2)

  • Maintenance officielle, conforme aux normes de stockage de mot de passe modernes

4. Résumé

L'utilisation de MD5 () pour stocker les mots de passe est obsolète et dangereux, et bien qu'il soit plus courant dans les premiers projets, il n'est plus sûr aujourd'hui. À mesure que les méthodes de cyberattaque continuent de mettre à niveau, les développeurs doivent abandonner l'ancien concept de sécurité et utiliser un moyen plus moderne et sécurisé de traiter les mots de passe des utilisateurs.

N'oubliez pas: la sécurité ne dépend pas du "cryptage", mais de la conception.
Embrasser Password_Hash () et rejeter MD5 () est le respect le plus fondamental pour la sécurité des utilisateurs.