Background
Você nunca ... realmente ... precisa saber a senha do usuário. Você só deseja verificar se um usuário que conhece a senha de uma conta.
Hash It:
armazene hash de senhas de usuário (criptografia unidirecional) por meio de uma forte função de hash. Uma pesquisa por "senhas de criptografia c #" fornece vários exemplos.
Consulte o criador de hash do SHA1 on - line para obter uma idéia do que uma função de hash produz (mas não use o SHA1 como uma função de hash, use algo mais forte, como o SHA256).
Agora, uma senha com hash significa que você (e os ladrões do banco de dados) não deve poder reverter esse hash de volta para a senha original.
Como usar:
Mas, você diz, como uso essa senha compactada armazenada no banco de dados?
Quando o usuário faz login, ele fornece o nome de usuário e a senha (no texto original). Você apenas usa o mesmo código de hash para o hash da senha digitada para obter a versão armazenada.
Portanto, compare as duas senhas com hash (hash do banco de dados para nome de usuário e a senha digitada e com hash). Você pode saber se "o que eles digitaram" correspondeu ao que o usuário original digitou para sua senha "comparando seus hashes.
Crédito extra:
Pergunta: Se eu tivesse seu banco de dados, não poderia simplesmente pegar um cracker como John the Ripper e começar a fazer hashes até encontrar correspondências com suas senhas armazenadas com hash? (já que os usuários escolhem palavras curtas do dicionário de qualquer maneira ... deve ser fácil)
Resposta: Sim ... sim eles podem.
Portanto, você deve 'saltar' suas senhas. Veja o artigo da Wikipedia sobre sal
Consulte o exemplo C # "Como hash de dados com salt"