O método ideal de guardar passwords é colocá-las de uma forma que não possam ser desencriptadas.
Uma forma comum antigamente de fazer as coisas era:
- encriptar a password e guardar na BD
- o utilizador escreve a password para fazer login
- desencripta-se da BD e compara-se a que o utilizador introduziu com a desencriptada
No entanto, a grande falha deste sistema é que no caso da base de dados ser comprometida, as passwords dos utilizadores, sendo desencriptáveis, também são comprometidas (e basta pensar que uma boa percentagem das pessoas usa a mesma password em todo o lado para perceber os problemas que isso acarreta).
Um algoritmo de
hashing é seguro para os utilizadores na medida em que é "one-sided", isto é, uma vez aplicado sobre uma qualquer string, não dá para pegar nela e voltar atrás. O algoritmo mais usado é o MD5 -
Message
Digest
5.
O que o
hostmake disse foi para gravares o hash MD5 da password na BD (considerando que as passwords são gravadas numa Base de Dados), e depois comparares o MD5 da password introduzida com o que está na BD.
Um método seria
PHP:
if(md5($_POST["password"])==$password_da_bd)
No entanto, para tornar esse sistema ainda mais seguro, o ideal seria o MD5 ser feito do lado do cliente por JavaScript (mas sem te fiares completamente neste sistema), pois assim torna-se ainda mais complicado a password ser interceptada por eavesdropping.
Continua a ser possível descobrir a password, mas só através de um pesado e moroso processo - bruteforce (ir experimentando sequências de caracteres até que alguma delas dê a hash)
A segurança é sempre uma coisa complicada. Mas acho que o pessoal é unânime no que toca a usar o MD5
(isso também te explica porque é que o "Esqueci-me da password" permite criar uma nova, mas não permite enviar ao utilizador a password dele para o mail
)
edit - o
stradale antecipou-se