你能告诉我,如果以下是安全散列密码的好办法,可以存储在数据库中:这是一个安全的方式来散列密码?
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();
}
提前非常感谢。
理想情况下,我认为你应该为每个用户有不同的盐,并将其存储在数据库中。 – Bridge
对不起,如果我有点密集,但如果有人可以访问数据库,那么存储盐不会让别人更容易破解加密吗? – ScubaSteve2012
@ ScubaSteve2012盐可以防止预先计算的哈希攻击(“彩虹表”)。由于密码是盐渍的,因此您的彩虹桌无法帮助找出原始密码。你将不得不使用这个哈希创建一个新的彩虹表,这几乎是一个暴力攻击。 – Oleksi