Quelques éléments ici :
-
Vous ne le cryptez pas vraiment, vous le hachez. Une chose facile à confondre pour les débutants, mais je voulais juste m'en débarrasser.
-
N'utilisez pas MD5, ce n'est tout simplement pas un hachage très sécurisé. Utilisez plutôt l'une des variantes SHA si possible.
-
Ne vous contentez pas de hacher le mot de passe, vous voudrez également le "saler". Fondamentalement, cela implique d'ajouter une chaîne aléatoire au mot de passe avant de le hacher et de stocker cette chaîne aléatoire quelque part où vous pourrez la récupérer plus tard (afin que vous puissiez valider le hachage lorsque l'utilisateur entre son mot de passe). Cela aide à prévenir les attaques par dictionnaire précalculées.
En ce qui concerne la génération du mot de passe, je pense que vous êtes sur la bonne voie - je le générerais simplement lors de la création de leur compte, je le leur enverrais par e-mail, puis le hacherais et stockerais le hachage (et un sel aléatoire) sur l'enregistrement de l'utilisateur dans le DB.