Alcune cose qui:
-
Non lo stai davvero crittografando, lo stai hackerando. È facile confondere i neofiti, ma volevo solo toglierlo di mezzo.
-
Non usare MD5, semplicemente non è un hash molto sicuro. Se possibile, usa invece una delle varianti SHA.
-
Non limitarti a eseguire l'hashing della password, vorrai anche "salarla". Fondamentalmente ciò comporta l'aggiunta di una stringa casuale alla password prima di eseguirne l'hashing e la memorizzazione di quella stringa casuale da qualche parte dove è possibile recuperarla in seguito (in modo da poter convalidare l'hash quando l'utente inserisce la password). Questo aiuta a prevenire gli attacchi ai dizionari precalcolati.
Per quanto riguarda la generazione della password, penso che tu sia sulla strada giusta:lo genererei semplicemente quando creano il proprio account, glielo e-mail, quindi lo hash e memorizzerei l'hash (e un salt casuale) sul record dell'utente nel DB.