Crypter un mot de passe

Afin de protéger les mots de passe des utilisateurs, il est absolument nécessaire qu'ils soient cryptés dans la base de données.

PHP met à notre disposition différentes fonctions d'encryption. Celle que nous utiliserons dans cet exemple est la fonction sha1().

▼Publicité


Mise à jour

L'utlisation de MD5 ou de SHA1, telle qu'expliquée ici, constitue un strict minimum en matière de sécurité.

Une clé de salage devrait être ajoutée pour éviter les risques de piratage par force brute ou par table de correspondance.

Pour plus d'information, consultez l'article « Cryptage, hachage, salage : comment mieux protéger les données sensibles dans une BD ».


Voici à titre indicatif ce que la fonction sha1() retournera lors de l'encryption du mot « test » : a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

Attention : une fois le mot de passe crypté avec sha1(), il est impossible de faire l'opération inverse pour retrouver le mot de passe original et c'est exactement ce que nous voulons. Pour vérifier le mot de passe saisi lors de la prochaine authentification, on le cryptera lui aussi avec sha1() et on comparera le mot de passe crypté avec celui stocké dans la base de données.

Ex : lors de la réception des donnée du formulaire :

PHP

if (isset($_POST['motdepasse'])) {

   $motdepasse = sha1($_POST['motdepasse']);

   ...     // requête pour retrouver le mot de passe de cet usager dans la BD

   if ($motdepasse == $enreg[0]) {

      echo "Bienvenue !";

   }

}

md5 vs sha1

L'algorithme md5, malgré le fait qu'il assure qu'un mot ne puisse pas être décrypté, comporte des problèmes de sécurité (voir article sur Wikipédia). C'est pourquoi on lui préférera l'algorithme sha1.

L'algorithme sha1 est beaucoup plus robuste que md5. De plus, le résultat est codé sur 160 bits contrairement à md5 qui produit un résultat sur 128 bits. md5 n'est plus conseillé pour le développement de nouvelles applications.

Attention aux sites qui vérifient à quel point votre mot de passe est sécuritaire

Il existe des sites Web qui vous offrent un service de vérification du niveau de sécurité offert par votre mot de passe. Il s'agit en fait d'un piège. Ce type de site comporte des milliers voire même des millions de mots de passes avec leur valeur originale et leur équivalent crypté avec md5 et/ou sha1. Lorsqu'un internaute utilise ce site pour tester son mot, le site ajoute ce mot et ses versions cryptées dans son immense base de données. Il devient donc possible de rechercher un mot de passe crypté pour trouver son équivalent décrypté.

Bien sûr, un utilisateur malveillant ne pourra rien faire tant qu'il n'a pas mis la main sur la version cryptée de votre mot de passe. Cependant, s'il réussit à le trouver dans un cookie ou à l'aide d'une injection SQL, il ne lui restera plus qu'à le tester sur un tel site. Si votre mot de passe s'y trouve, bingo ! N'UTILISEZ DONC PAS CE TYPE DE SITE... LA SÉCURITÉ DE VOTRE MOT DE PASSE SERAIT IMMÉDIATEMENT COMPROMISE.

Entrée manuelle de données cryptées dans la base de données

Certains SGBD permettent d'entrer facilement des données cryptées dans une table. MySQL, via son utilitaire phpMyAdmin, permet d'utiliser la fonction SHA1() lors de l'insertion de données :

Entrer un mot de passe crypté avec SHA1

Attention : le mot de passe crypté sera beaucoup plus long que le mot de passe non crypté. Assurez-vous que votre champ soit suffisamment long.

Pour plus d'information

« Sécuriser une page par un mot de passe crypté sha-1 en php - Crypter des mot de passe md5/sha-1 ». Support du Web. http://www.supportduweb.com/scripts_tutoriaux-code-source-40-securiser-une-page-par-un-mot-de-passe-crypte-sha-1-en-php-crypter-des-mot-de-passe-md5-sha-1.html

« Sécuriser les mots de passe avec les hashs et les salts ». Apprendre PHP. http://www.apprendre-php.com/tutoriels/tutoriel-35-securiser-les-mots-de-passe-avec-les-hashs-et-les-salts.html

« MD5 ». Wikipédia. http://fr.wikipedia.org/wiki/MD5

« SHA-1 ». Wikipédia. http://fr.wikipedia.org/wiki/Sha1

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories