Algunas cosas aquí:
-
Realmente no lo estás encriptando, lo estás codificando. Algo fácil de confundir para los novatos, pero solo quería sacar eso del camino.
-
No use MD5, simplemente no es un hash muy seguro. Utilice una de las variantes SHA en su lugar si es posible.
-
No se limite a codificar la contraseña, también querrá "saltarla". Básicamente, esto implica agregar una cadena aleatoria a la contraseña antes de codificarla y almacenar esa cadena aleatoria en algún lugar donde pueda recuperarla más tarde (para que pueda validar el hash cuando el usuario ingrese su contraseña). Esto ayuda a prevenir ataques de diccionarios precalculados.
En cuanto a generar la contraseña, creo que está en el camino correcto:simplemente la generaría cuando creen su cuenta, se la enviaría por correo electrónico, luego la cifraría y almacenaría el hash (y una sal aleatoria) en el registro de usuario en el DB.