Hachage, sel et votre sécurité : pourquoi c'est crucial en 2025 ?
\n\nImaginez : vous avez créé un super site, tout fonctionne, les utilisateurs s'inscrivent. Mais un jour, la base de données fuit sur le net. Que verront les attaquants ? Si vous stockez les mots de passe en clair, c'est une catastrophe. Si vous utilisez l'ancien md5, c'est presque pareil. En revanche, si vous appliquez un hachage sécurisé avec sel, ils ne verront qu'un ensemble de caractères sans signification. En 2025, ce n'est plus une simple recommandation, c'est une norme de sécurité.
\n\nDans cet article, nous allons voir comment hacher correctement les mots de passe en PHP en utilisant des algorithmes modernes, du sel et les meilleures pratiques. Vous découvrirez pourquoi les anciennes méthodes sont dangereuses et comment passer à un stockage sécurisé des mots de passe en 10 minutes.
\n\nPourquoi md5 et sha1 sont-ils dangereux ?
\n\nDe nombreux développeurs débutants commettent la même erreur : utiliser md5($password) ou sha1($password). En 2025, ce n'est pas seulement une mauvaise pratique, c'est une faille de sécurité directe. Pourquoi ?
- \n
- Vitesse de calcul. MD5 et SHA1 sont conçus pour la rapidité, pas pour la sécurité. Les GPU modernes peuvent tester des milliards de hachages par seconde. \n
- Absence de sel. Si deux utilisateurs choisissent le même mot de passe, leurs hachages seront identiques. Cela permet d'utiliser des tables arc-en-ciel. \n
- Collisions. Des collisions pratiques ont été trouvées pour MD5 : deux entrées différentes produisent le même hachage. \n
Heureusement, PHP dispose de fonctions intégrées qui résolvent tous ces problèmes. Et cela ne nécessite aucune bibliothèque externe.
\n\npassword_hash et password_verify : votre arme secrète
\n\nDepuis PHP 5.5.0, le langage propose deux fonctions magiques : password_hash() et password_verify(). Elles génèrent automatiquement un sel, utilisent des algorithmes cryptographiquement robustes et protègent contre les attaques temporelles.
Exemple d'utilisation simple :
\n\n// Hachage du mot de passe\n$password = "MonMotDePasseSuperSecurisé!";\n$hash = password_hash($password, PASSWORD_DEFAULT);\necho $hash; // $2y$10$...\n\n\nQue s'est-il passé ici ? La fonction password_hash :
- \n
- A généré un sel aléatoire \n
- A choisi l'algorithme optimal (par défaut bcrypt) \n
- A calculé le hachage \n
- A retourné une chaîne contenant à la fois le hachage, le sel et les informations sur l'algorithme \n
La vérification du mot de passe est tout aussi simple :
\n\n// Vérification du mot de passe\n$inputPassword = "MonMotDePasseSuperSecurisé!";\nif (password_verify($inputPassword, $hash)) {\n echo "Mot de passe correct !";\n} else {\n echo "Mot de passe incorrect.";\n}\n\n\nNotez bien : vous n'avez pas besoin de stocker le sel séparément. Il est déjà intégré dans le hachage. C'est ce qu'on appelle le hachage sécurisé avec sel en action.
\n\nQuel algorithme choisir en 2025 ?
\n\nPar défaut, password_hash utilise bcrypt. C'est un excellent choix pour la plupart des projets. Mais nous avons d'autres options :
| Algorithme | \nConstante | \nRecommandation | \n
|---|---|---|
| Bcrypt | \nPASSWORD_BCRYPT | \n Excellent choix, supporté partout | \n
| Argon2i | \nPASSWORD_ARGON2I | \n Résistant aux attaques par canaux auxiliaires | \n
| Argon2id | \nPASSWORD_ARGON2ID | \n Meilleur choix en 2025 | \n
Argon2id est le vainqueur du concours PHC (Password Hashing Competition). Il résiste à la fois aux attaques GPU et aux attaques temporelles. Si votre PHP est compilé avec le support d'Argon2 (ce qui est déjà la norme en PHP 8.x), utilisez-le.
\n\nConfiguration du coût de hachage
\n\nL'une des idées clés du hachage sécurisé avec sel est de rendre le calcul