Fonction de chiffrement en PHP
Pour sécuriser certaines données récoltées (comme les mots de passe), il faut effectuer des opérations de hachage qui consiste à crypter les informations pour les rendre illisibles et inexploitables pour les attaquants.
Hachage
La fonction md5() calcule le md5 (algorithme de hachage RSA Data Security, Inc. MD5 Message-Digest Algorithm) sous forme d’un nombre hexadécimal de 32 caractères.
$login = "toto";
echo md5($login);
Affichage
f71dbe52628a3f83a77ab494817525c6
Même si la technique du hachage par md5 est rapide et efficace, elle est déconseillée pour protéger un mot de passe utilisateur. En effet, les machines actuelles, puissantes, peuvent attaquer la sortie de l’algorithme pour retrouver la chaîne originale.
Le md5() pourra être utilisé pour crypter des noms de fichier ou des noms de répertoire.
La fonction crypt() permet de faire un hachage à sens unique, c’est à dire indéchiffrable. Cette fonction exploite la technique du grain de sel ou salt qui consiste à rajouter une petite donnée supplémentaire dans le hachage pour le rendre plus difficile à cracker. En effet, les attaquants utilisent des dictionnaires qui enregistrent et compare les hachages. Le salt élimine donc ces possibilités d’attaques.
Cette fonction prend en paramètre le terme à hacher et le salt (optionnel mais recommandé pour la protection et la vérification d’un mot de passe).
$login = "toto";
echo crypt($login,"exemple");
Affichage
exSUeeoWsOM2g
Vous remarquez que les deux premières lettres du salt (ici ‘exemple’) sont retournées au début du hachage.
Si le deuxième paramètre est omis, PHP génèrera automatiquement le salt.
$login = "toto";
echo crypt($login);
Affichage
$1$o69M0syH$SVs139okLoIIXhnwxuM.O0
Vérification d’un mot de passe
La fonction hash_equals() est utilisée pour la vérification d’un mot de passe crypté avec crypt().
// salt initialisé par php
$hachage = crypt("toto");
// vérification à partir d'une valeur saisie
$saisie = "toto";
if (hash_equals($hachage, crypt($saisie, $hachage))) {
echo "Mot de passe valide !";
}
Affichage
Mot de passe valide !