La prego di dirmi se la seguente è un buon modo per hash in modo sicuro una password da memorizzare in un database:È un modo sicuro per cancellare una password?
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();
}
Molte grazie in anticipo.
Idealmente penso che dovresti avere un sale diverso per utente e archiviarlo anche nel database. – Bridge
Scusate se sono un po 'denso, ma se qualcuno accede al database, la memorizzazione del sale non rende più facile a qualcuno di crackare la crittografia? – ScubaSteve2012
@ ScubaSteve2012 Il sale previene gli attacchi di hash precalcolati ("Tabelle arcobaleno"). Poiché le password sono salate, la tua tabella arcobaleno sarebbe inutile per aiutare a capire le password originali. Dovresti creare una nuova tabella arcobaleno usando questo hash, che è praticamente un attacco a forza bruta. – Oleksi