MD5 hash con sal para mantener la contraseña en DB en C #

¿Podría por favor aconsejarme algún algoritmo fácil para hash contraseña de usuario por MD5, pero con sal para boost la fiabilidad.

Ahora tengo este:

private static string GenerateHash(string value) { var data = System.Text.Encoding.ASCII.GetBytes(value); data = System.Security.Cryptography.MD5.Create().ComputeHash(data); return Convert.ToBase64String(data); } 

Puede usar la clase HMACMD5 :

 var hmacMD5 = new HMACMD5(salt); var saltedHash = hmacMD5.ComputeHash(password); 

Funciona con SHA-1, SHA256, SHA384, SHA512 y RIPEMD160 también:

 var hmacSHA1 = new HMACSHA1(salt); var saltedHash = hmacSHA1.ComputeHash(password); 

Tanto la salt como la password se esperan como matrices de bytes.

Si tiene cadenas, primero tendrá que convertirlas a bytes:

 var salt = System.Text.Encoding.UTF8.GetBytes("my salt"); var password = System.Text.Encoding.UTF8.GetBytes("my password"); 

Aquí hay una muestra . Maneja MD5, SHA1, SHA256, SHA384 y SHA512.

Además de la clase HMACSHA1 mencionada anteriormente, si solo necesitas un hash salado rápido, entonces ya estás el 95% del camino:

 private static string GenerateHash(string value, string salt) { byte[] data = System.Text.Encoding.ASCII.GetBytes(salt + value); data = System.Security.Cryptography.MD5.Create().ComputeHash(data); return Convert.ToBase64String(data); } 

El verdadero truco es almacenar la sal en un lugar seguro, como su machine.config.

Microsoft ha hecho este trabajo por usted, pero requiere un poco de investigación. Instale Web Service Extensions 3.0 y eche un vistazo a la función Microsoft.Web.Services3.Security.Tokens.UsernameToken.ComputePasswordDigest con Reflector.

Me gustaría publicar el código fuente para esa función aquí, pero no estoy seguro de si es legal hacer eso. Si alguien puede tranquilizarme, lo haré.