décryter les mots de passe de ma base de donnée

Répondre
telemark
le 08/04/2011 à 09:44
telemark
salut,

je débute dans le php, j'ai créé un formulaire d'inscription pour mon site. par contre je voudrais récupérer les mots de passe de ma bade de donnée, car ils sont en md5.
si un utilisateur oublie son mot de passe comment je fais pour lui rendre?

merci
i M@N
le 08/04/2011 à 11:24
i M@N
Hello.

md5 ne se décrypte que très difficilement! voir http://fr.wikipedia.org/wiki/MD5

La bonne façon de procéder c'est de toujours hasher en md5 le pass avant de l'enregistrer dans la base.

Si un utilisateur oublie son mot de passe, il faut que tu crées un formulaire avec un champ où il peut rentrer son email en cas de mot de passe oublié. Lorsqu'il valide le formulaire tu génère un mot de passe aléatoire avec un nombre par exemple et tu le hash md5 :
<?php
//on généère un nombre entre 10000 et 9999
$i = rand(10000,99999);
//on md5 ce nombre
$pass = md5($i);
?>

Tu fais un update du champ pass de ta table où l'email est celui donné par l'utilisateur dans le formulaire.

Surtout tu n'oublie pas d'envoyer un email avec le pass temporaire et tu précise bien qu'il faut le modifier une fois connecté (pour celà il te faut avoir un script qui permet la mise à jour de leurs infos par tes membres).

@+...
One Love, One Heart, One Unity.
LupusMic
le 08/04/2011 à 21:59
LupusMic
Enregistrer le mot de passe en clair dans la base MySQL n'est pas forcément une hérésie. C'est un choix technique.

L'algorithme MD5 est déconseillé depuis quelques années maintenant, et il faut lui préférer une variante de SHA.

Et il n'y a pas de raison de modifier le mot de passe généré.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
i M@N
le 08/04/2011 à 23:14
i M@N
reuh ...

En clair? Donc si un p'tit malin arrive à faire une injection SQL il peut récupérer les identifiants ... là je ne suis pas d'accord avec toi, je trouve ça dangeureux.

Même si md5 n'est pas ce qui se fait de mieux ça reste simple à mettre en oeuvre. C'est vrai on peut faire mieux, mais il débute.

Bien sûr qu'il faut modifier le pass généré, mes pass j'aime avoir la liberté de les choisir, un nombre à 4 chiffres c'est trop faible ça ne peut être que temporaire.

Sinon tu proposerais quoi concrètement?

@+...
One Love, One Heart, One Unity.
LupusMic
le 10/04/2011 à 09:26
LupusMic
Je connais l'argument de l'injection SQL. Mais l'existence d'annuaire de hash MD5 rend la protection caduque. Du coup, pour éviter les injections SQL, le seul moyen est de les éviter en codant correctement les requêtes.
Mais dans l'absolu, c'est un problème de compromis. J'ai travaillé sur un SI où j'avais accès à l'ensemble des mots de passes de l'ensemble des clients de la société qui m'employait. C'est quelque chose qui m'avait choqué, mais à l'usage, il n'était pas possible de faire autrement. Ça aurait été trop coûteux.

Je ne vois pas la différence de difficulté d'usage entre MD5 et SHA qui justifierai qu'on privilégie une méthode dépassée, en laissant croire qu'on a apporté une protection suffisante.

Il faudra dire à la Caisse d'Épargne que 4 chiffres c'est trop faible ;) Mais je suis d'accord dans l'absolu que ce n'est pas suffisant. Mais alors pourquoi proposes-tu de générer un mot de passe faible ?

Ce que je proposerais est plutôt un truc de ce genre :
<?php
define(CANDIDATES, 'abcdefghijk....z12...90$!@') ;
define(SIZE_PWD, 42) ;

$password = substr(str_shuffle(CANDIDATES), 0, SIZE_PWD) ;


Ensuite, si tu veux donner la possibilité à l'utilisateur de choisir son mot de passe 'azerty', c'est un choix bien plus dangereux que d'enregistrer les mots de passe en clair dans la base de données ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours