to že chcete šifrovat a ne hashovat mi trochu zavání tím, že budete chtít znát plaintext hesla.. to se nedělá. k ověření stačí hashe.
na serveru můžete mít uloženy hashe hesel, pro větší bezpečnost ještě osolena nějakou společnou solí sůl0. solení znamená, že _před_ zahashováním tu sůl k heslu nějak připojíte.
no a klient nebude potřebovat znát žádné tajné šifrovací heslo, ale jen tu sůl0 (to není nic tajného) a samozřejmě správnou hashovací funkci. heslo se osolí solí0, zahashuje, pak osolí náhodnou solí a znova zahashuje. na server se k ověření pošle výsledný hash a ta tajná sůl.. na serveru se vytáhne uživatelovo zahashované heslo, osolí tou obdrženou náhodnou solí, zahashuje, a porovná s obdrženou hashí.
jo a ty 2 hashovací funkce mohou být klidně odlišné..