A więc powiem jak ja najczęściej coś podobnego wykonuję.
Ktoś prosi o zmianę hasła podając ważny login lub email rejestracyjny(ważne by był unikatowy w bazie, bo proces idzie w pełni z automatu). Na powiązaną z tym kontem skrzynkę pocztową idzie mail o próbie zmiany hasła, gdzie jest link aktywacyjny, który należy kliknąć by baza dopiero wtedy zamieniła hasło. Tak by "dowcipnisie" komuś notorycznie haseł poprzez tę możliwość nie zmieniali. I tutaj można na kilka sposobów rozwiązać sprawę. Albo już teraz podać hasło, albo dopiero w mailu, który otrzyma przy pomyślnej zmianie hasła.
Na każdym etapie hasło jest hashowane z danych nie związanych z tym kontem, choćby timestamp z losową wartością dodaną czy tego typu dane. Przechowywanie hasła jawnie w bazie to jak spanie na beczce prochu. Gdy usłyszysz huk, już będzie za późno

Nikt nie ma prawa, nawet znając algorytm, uzyskać hasła. Stąd własnie sole, by nawet banalne hasła były trudne do "odczytu" z tęczowych tablic.