Aller au contenu
  • Veuillez ne pas poster de message pour but d'insulter, incitation à la haine, propos sexuels et tout autre qui ne respecte pas nos conditions générales !

Crypter les mdp avec password_hash()


Tig3r

Messages recommandés

Bonsoir tout le monde !

 

Aujourd'hui je rédige ce petit tutoriel qui vous permettra de crypter des mots de passe en toute sécurité !

 

Important : pour comprendre ce qui est indiqué dans ce tutoriel, vous devez avoir un minimum de connaissance dans le langage PHP. Je n'explique pas dans le détail chaque élément de chaque code !

 

Laissez moi vous présenter la fonction password_hash() en restant le plus simple possible !

 

=> Comme son nom l'indique, cette fonction retourne une clé de hachage pour un mot de passe (donc une chaîne de caractères).

 

L'algorithme de hachage utilisé est très fort, et irréversible. Autrement dit, il est impossible de retrouver le mot de passe d'origine à partir d'un hachage généré par cette fonction. Sympa non ? La question est, comment utiliser correctement cette fonction ?

 

Utilisation

 

Pour l'utiliser, je vous propose cette syntaxe :

password_hash($motDePasseACrypter, PASSWORD_BCRYPT)

• $motDePasseACrypter : cette variable stocke le mot de passe à crypter (par exemple, le mot de passe "12345").

• PASSWORD_BCRYPT : ceci correspond à l'algorithme utilisé. Personnellement j'utilise bcrypt.

 

Exemple n°1

 

Voici un exemple pour illustrer ce qui est dit précédemment. J'ai réalisé un code PHP qui permet d'afficher le mot de passe entré par l'utilisateur sous forme cryptée.

 

• Premier essai

Pour avoir accès à ce lien, merci de vous connecter.

• Deuxième essai : 

Pour avoir accès à ce lien, merci de vous connecter.

 

Comme vous pouvez le remarquer, le mot de passe est "12345", mais les hachages sont différents. Ce qui signifie que 1 mot de passe peut avoir plusieurs hachages possibles ! Et 1 clé de hachage correspond à un unique mot de passe. Superbe non ?

 

Dans mon exemple, la forme cryptée correspond à ceci :

$password = password_hash($_POST['password'], PASSWORD_BCRYPT);

Comme expliqué précédemment, $_POST['password'] correspond au mot de passe à crypter. Et PASSWORD_BCRYPT correspond à l'algorithme utilisé.

 

Ok, maintenant vous savez crypter un mot de passe, mais comment faire pour vérifier si deux mots de passe correspondent, sachant que pour 1 mot de passe, plusieurs hachages sont possibles ? :mmh:C'est ce que nous allons voir tout de suite !

 

Vérification avec password_verify()

 

password_verify() permet de vérifier si un mot de passe correspond à un hachage possible. Voici comment cette fonction s'utilise

password_verify($motDePasse, $hash)

Donc si le hachage contenu dans la variable $hash correspond au mot de passe d'origine $motDePasse, alors la fonction password_verify retourne True (pour vrai).

Par contre si ça ne correspond pas, cela retourne Fasle (pour faux).

Cette fonction retourne donc un booléen.

 

Exemple n° 2

 

Pour se connecter sur un site, cela signifie que notre compte est enregistré dans une base de donnée (logique). Cette dernière contient notamment notre mot de passe, sous forme cryptée bien sûr. Pour vérifier si le mot de passe que vous avez entré dans le formulaire de connexion correspond avec celui sauvegardé dans la bdd, nous devons utiliser la fameuse fonction password_verify :

$hash = '$2y$10$brjzSojLO2TRHLIR3HqX6..A.ShTnzp23ZVAkovkfpEYIyOLUlu9y';
$password = '12345';

if(password_verify($password, $hash)){
    echo "Oui";
}
else{
    echo "Non";
}

Ici, $hash correspond à un hachage possible du mot de passe "12345" (généré précédemment dans l'exemple n°1).

Pour avoir accès à ce lien, merci de vous connecter.

Magique ! Comme la fonction password_verify retourne True, "Oui" s'affiche sur la page. 

 

 

J'espère que ce petit tutoriel vous aura aidé, et qu'il a été suffisamment facile à comprendre. Si vous avez des questions, n'hésitez pas à me les poser en commentaire ou sur Discord.

Je vous souhaite une bonne soirée ainsi qu'un bon week-end !

- Tig3r :tiger:

Développeur

PHP, Python, Java, NodeJS

Lien à poster
Partager sur d’autres sites

Il y a 22 heures, Supra a dit :

il y a une possibilitée d'utiliser des salt ?

C'est à dire ?

Ce mode de hachage est suffisamment sécurisé et fiable, donc l'utiliser tel que je l'ai présenté est largement suffisant.

Modifié par Tig3r

Développeur

PHP, Python, Java, NodeJS

Lien à poster
Partager sur d’autres sites

  • 1 mois plus tard...

@ Supra 

Pour avoir accès à ce lien, merci de vous connecter.

 

"Un salt aléatoire sera généré par la fonction password_hash() pour chaque mot de passe haché. C'est le mode de fonctionnement prévu."
Donc pas besoin de te soucier d'utiliser ou non un salt, c'est fait par défaut.

 

@ Tig3r PASSWORD_ARGON2I est plus sécurisé que PASSWORD_BCRYPT si il y a possibilité d'utiliser PHP 7.2. Et si il y a possibilité d'utiliser PHP 7.3, c'est encore mieux car on peut utiliser PASSWORD_ARGON2ID qui est une version améliorée de PASSWORD_ARGON2I.

Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...