¿Me podría decir si la siguiente es una buena manera de hash de forma segura una contraseña que se almacena en una base de datos:¿Es esta una forma segura de hash de una contraseña?
public string CreateStrongHash(string textToHash) {
byte[] salt =System.Text.Encoding.ASCII.GetBytes("TeStSaLt");
Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(textToHash, salt, 1000);
var encryptor = SHA512.Create();
var hash = encryptor.ComputeHash(k1.GetBytes(16));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++) {
sb.Append(hash[i].ToString("x2"));
}
return sb.ToString();
}
Muchas gracias de antemano.
Idealmente, creo que debería tener una sal diferente por usuario, y almacenar eso en la base de datos también. – Bridge
Disculpe si estoy siendo un poco denso, pero si alguien obtiene acceso a la base de datos, ¿el almacenamiento de sal no hace que sea más fácil para alguien descifrar el cifrado? – ScubaSteve2012
@ ScubaSteve2012 La sal previene los ataques hash pre calculados ("tablas Rainbow"). Debido a que las contraseñas están saladas, su tabla arcoiris sería inútil para ayudar a descubrir las contraseñas originales. Deberías crear una nueva tabla de arcoíris usando este hash, que es más o menos un ataque de fuerza bruta. – Oleksi