Senhas e segredos.
Às vezes surge a necessidade de armazenamento de alguma informação secreta, de conhecimento de um ou poucos usuários como senhas e números de cartão de crédito
A primeira recomendação quando surgir a necessidade de armazenar um segredo é a seguinte: simplesmente não o armazene. Por exemplo, qual seria conseqüência de não armazenar um número de cartão de crédito junto ao perfil do usuário e pedi-lo à cada compra? Pode ser que isso seja viável. Outra possibilidade seria armazenar apenas parte do número do cartão, sem o código de segurança, por exemplo.
Desta forma, se a base de dados for comprometida os problemas são pequenos.
Mesmo quando tivermos que armazenar um segredo, considere a possibilidade de armazenar um hash. Um hash é o resultado de uma formula matemática aplicada sobre o segredo, de forma que não se pode obter o valor original a partir do hash. Esta técnica é usada comumente para senhas. O aplicativo armazena o hash da senha e quando o usuário entra a senha de login, o aplicativo calcula o hash e compara com o valor armazenado.
Caso seja realmente necessário armazenar um segredo, encripte-o com um bom algoritmo.
Novamente, o namespace “System.Security.Cryptography” traz boas rotinas de hash e criptografia.