Algumas coisas aqui:
-
Você não está realmente criptografando, você está fazendo hash. Coisa fácil para os novatos confundirem, mas só queria tirar isso do caminho.
-
Não use MD5, apenas não é um hash muito seguro. Use uma das variantes SHA, se possível.
-
Não apenas hash a senha, você também vai querer "saltá-la". Basicamente, isso envolve adicionar uma string aleatória à senha antes de fazer o hash e armazenar essa string aleatória em algum lugar onde você possa recuperá-la mais tarde (para que você possa validar o hash quando o usuário inserir sua senha). Isso ajuda a evitar ataques de dicionário pré-computados.
Quanto à geração da senha, acho que você está no caminho certo - eu apenas a geraria quando eles criassem sua conta, enviaria por e-mail para eles, depois faria o hash e armazenaria o hash (e um sal aleatório) no registro do usuário no arquivo DB.