Könnten Sie mir bitte sagen, ob die folgenden ein guter Weg ist sicher, ein Passwort-Hash in einer Datenbank gespeichert werden:Ist dies eine sichere Möglichkeit, ein Passwort zu hashen?
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();
}
Vielen Dank im Voraus.
Idealerweise denke ich, Sie sollten ein anderes Salz pro Benutzer haben, und speichern Sie das in der Datenbank auch. – Bridge
Tut mir leid, wenn ich ein bisschen zu dicht bin, aber wenn jemand Zugriff auf die Datenbank erhält, macht es das Speichern des Salzes nicht einfacher für jemanden, die Verschlüsselung zu knacken? – ScubaSteve2012
@ ScubaSteve2012 Das Salz verhindert vorberechnete Hash-Angriffe ("Rainbow-Tabellen"). Da die Passwörter gesalzen sind, wäre Ihre Rainbow-Tabelle nutzlos, um die ursprünglichen Passwörter herauszufinden. Du müsstest eine neue Rainbow-Tabelle erstellen, indem du diesen Hash verwendest, der ein Brute-Force-Angriff ist. – Oleksi