Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/04/2011, 12:20
Avatar de jcarrascal
jcarrascal
 
Fecha de Ingreso: enero-2008
Mensajes: 87
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: como guardar contraseñas encryptadas en C#.net en una bse de datos en sql

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 original
  1. public static string Hash(string str)
  2. {
  3.     if (string.IsNullOrEmpty(str))
  4.         throw new ArgumentNullException("str");
  5.  
  6.     byte[] bytes;
  7.     using (HashAlgorithm ha = RIPEMD160.Create())
  8.         bytes = ha.ComputeHash(Encoding.Default.GetBytes(str));
  9.     return ToHexString(bytes);
  10. }

Cuando la vas a guardar sacas un hash

Código C#:
Ver original
  1. user.PasswordHash = CryptographyHelper.Hash(password);
  2. user.Save();

Y cuando necesites comprobar si es la misma contraseña sacas otro hash:

Código C#:
Ver original
  1. if (CryptographyHelper.Hash(password) == user.PasswordHash)
  2.     // Correcto
  3. else
  4.     // 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.