No es muy recomendable cifrar y descifrar contraseñas ya que si alguien te descubre la clave van a tener acceso a todas las contraseñas a la vez. Es mejor almacenar un Hash de la contraseña y cuando tengas que comprobar si es la correcta simplemente sacas otro Hash y compruebas que es el mismo.
Aquí tienes un método que uso para generar el Hash:
Código C#:
Ver originalpublic static string Hash(string str)
{
if (string.IsNullOrEmpty(str))
throw new ArgumentNullException("str");
byte[] bytes;
using (HashAlgorithm ha = RIPEMD160.Create())
bytes = ha.ComputeHash(Encoding.Default.GetBytes(str));
return ToHexString(bytes);
}
Cuando la vas a guardar sacas un hash
Código C#:
Ver originaluser.PasswordHash = CryptographyHelper.Hash(password);
user.Save();
Y cuando necesites comprobar si es la misma contraseña sacas otro hash:
Código C#:
Ver originalif (CryptographyHelper.Hash(password) == user.PasswordHash)
// Correcto
else
// Error
Algo más seguro aun es generar un Hash con sal, lo que consiste en agregarle un texto al hash de la contraseña y volver a sacar otro Hash, pero con el método que te mostré ya vas por buen camino.