Tous les programmeurs sont un jour confrontés à l'enregistrement de mots de passe. Généralement, l'enregistrement se fait dans une base de données, mais il peut aussi se faire dans un fichier.
La première solution consiste à enregistrer tout simplement le mot de passe que l'utilisateur a entré. Celle-ci n'est pas la meilleure du point de vue de la sécurité. En effet, en cas d'intrusion dans la base de données, l'internaute malveillant va avoir accès directement aux codes.
La méthode utilisée est bien entendu le cryptage des informations. Pour cela, PHP possède une bibliothèque nommée MyCrypt « qui dispose d'une grande variété d'algorithmes de chiffrement, tels DES, TripleDES, Blowfish (par défaut), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 et GOST en modes CBC, OFB, CFB et ECB ».
Je vais vous présenter dans la limite de mes compétences la fonction crypt qui est un algorithme unidirectionnel. En plus clair, une fois cryptés, les caractères ne peuvent être décryptés ce qui augmente encore la sécurité.
Voici le descriptif de la fonction :
string crypt ( string $str [, string $salt ] )
Le premier mot string indique que la fonction renvoie une chaine de caractères (les données cryptées). A l'intérieur des parenthèses doivent se trouver les paramètres de la fonction. Les crochets indiquent les paramètres facultatifs (ici : $salt).
Voici une application concrète :
<?php
echo crypt('Bonjour tout le monde', 3);
?>
La fonction nous renvoie « 3$T6rFc8t/UH6 ». Le chiffre 3 est le paramètre facultatif que l'on a vu juste avant ($salt). On le nomme le grain de sel. Vous pouvez entrer le chiffre que vous souhaitez. Il sert à améliorer le cryptage. De plus, la fonction crypt ne renvoie pas le même résultat pour une même chaine avec différents grains de sel.
Ce paramètre est facultatif. S'il est omis, il sera généré aléatoirement.
Ainsi, il convient d'enregistrer dans la base de données MySQL ou autre uniquement la chaine cryptée.
Je vous ai dit que le cryptage était unidirectionnel et que l'on ne pouvait pas faire un décryptage. Mais alors comment fait-on pour valider le mot de passe de l'internaute ? La solution est toute simple : il suffit de prendre le code de l'utilisateur, de le crypter et de le comparer à l'enregistrement crypté de la base de données en faisant attention d'utiliser le même grain sel.
Si vous n'avez pas spécifié de grain de sel, il va malgré tout falloir utiliser le même, pour cela, il faut forcer l'utilisation du même grain de sel avec le code suivant :
<?php
if (crypt($entree_utilisateur, $mot_de_passe) == $mot_de_passe) {
echo 'Le mot de passe correct';
}
?>





