8797 sujets

Développement web côté serveur, CMS

Ma problématique est simple :

Je gère des inscriptions et crypte le mot de passe avec sha1 pour qu'il n'apparaisse pas en clair dans la BDD.

Mais si je veux envoyer à l'utilisateur son mot de passe (lors d'un oubli par exemple), il est crypté (forcément, c'est le but!)

Comment puis-je "de-sha-iser" le mot de passe pour que l'utilisateur reçoive son mot de passe en clair et non pas les 40 caractères du cryptage?

Merci par avance pour vos réponses.
Modifié par zamoy (26 Oct 2007 - 17:18)
Bonjour,

la réponse est simple aussi: non.

Le sha1 est un encodage "à sens unique" il n'est pas possible de décoder la chaine obtenue*. C'est d'ailleur pour ça qu'il est souvent utilisé pour stocker les mot de passe: même si quelqu'un accède à la base de donnée il ne pourra pas s'en servire.

Pour ton problème la solution la plus courante consiste à en régénérer un (avec uniqid(), mt_rand, etc), le delivrer (par mail habituellement), l'encoder en sha1 puis écraser l'ancien dans la base. Ainsi le mot de passe en claire n'est jamais stocké sur le serveur.


* ce n'est pas totalement vrai, la réponse exacte est: il n'existe aucun alghorithme permettant de retrouver la chaine original depuis une valeur sha1. Il reste BRUTEFORCE soit tenter toutes les valeurs imaginables les unes après les autres jusqu'a obtenir la même chaine (2^80 opérations).
Apparement il existe aussi une autre methode en "seulement" 2^63 opérations. Source (en)
Modifié par Necromantik (26 Oct 2007 - 16:49)