Fonction équivalente à password en php

Résolu/Fermé
Signaler
Messages postés
30
Date d'inscription
lundi 10 février 2014
Statut
Membre
Dernière intervention
12 novembre 2014
-
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
-
Bonjour,

j'ai une table qui contient la liste des comptes utilisateurs et leurs mots de passe.
les mots de passe sont cryptés en utilisant la fonction password de mysql.
maintenant je cherche la fonction équivalente à la fonction password en php.

merci

3 réponses

Messages postés
1419
Date d'inscription
mardi 8 janvier 2008
Statut
Membre
Dernière intervention
27 janvier 2015
125
Bonjour.
Il n'y a pas vraiment d'équivalent.

Ce que l'on fait d'habitude:
1- L'utilisateur entre son MDP ("banane" par exemple)
2- On chiffre le mot de passe rentré par l'utilisateur en php. (ça va donné une chaine de caractère bizarre)
3- on stocke cette chaine de caractère bizarre dans la BDD
4- quand l'utilisateur veut s'identifier a nouveau, on chiffre le MDP qu'il entre et on regarde si la chaine de caractère correspond a celle stocké en BDD.

Avantage: même l'admin système ne peut pas avoir accès au MDP en clair car il est tout le temps chiffré. Et en cas de vol de donnée, le MDP ne pourra pas être utilisé.

Pour savoir comment chiffrer un mot ("crypter" est un abus de langage) en php c'est par ici:
https://www.php.net/manual/fr/faq.passwords.php#faq.passwords.fasthash
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 297
'lut, la doc de MySQL ne semble rien indiquer quant a l'algorithme utilisé par
PASSWORD()
, et il est même précisé qu'il ne faut pas s'en servir dans ses applis... D'ailleurs, si on regarde la source de MySQL, on peut se rendre compte qu'il s'agit d'un algorithme spécifique.

Pour arriver à un résultat similaire en PHP, on peut se servir de la fonction hash(), qui permet de hasher un mot de passe avec plusieurs algorithmes. Généralement on choisit md5 ou sha1 à tort: ces hashages ont fait preuve de leur inefficacité par rapport aux collisions de hash; ils ne sont donc pas sécurisés. Choisis sha256 ou plus, ou un autre algorithme s'il est sécurisé, puis:
$hashMdp = hash("sha256", $mdp);


Si tu veux "migrer" les mots de passe MySQL vers un autre algorithme, tu es dans le pétrin: on ne peut pas convertir entre 2 algorithmes sachant qu'ils sont irréversibles...

La seule "solution" serait de traduire la source en C de la fonction PASSWORD en PHP.
Messages postés
30
Date d'inscription
lundi 10 février 2014
Statut
Membre
Dernière intervention
12 novembre 2014
1
donc selon vous, je dois changer la fonction de cryptage?
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 297
Petite note: ce n'est pas du cryptage mais du hachage (hash en anglais) que l'on fait: un cryptage est réversible avec une clé/mot de passe, le hachage n'est pas réversible.
Sachant que la fonction PASSWORD utilisée par MySQL n'a pas d'équivalent en PHP (ni dans d'autres langages), il serait préférable de prendre une fonction "standard" comme sha256, qui est disponible en PHP et MySQL. Mais comme je l'ai dit, il n'est pas possible de convertir un mot de passe déjà haché, donc si tu disposes déjà d'une base de données avec des utilisateurs, tu te trouves dans une impasse de sécurité -- mais cela dépend de ton scénario.
Messages postés
2624
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
2 décembre 2021
477
Salut,

Doc PHP, Hashage des mots de passe : https://www.php.net/manual/fr/faq.passwords.php#faq.passwords.bestpractice

Bonne journée