我想将密码存储在数据库中。以下代码的安全性如何:
static string ComputeHash(string password, string salt, int iteration)
{
Rfc2898DeriveBytes hash = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt), iteration);
return Convert.ToBase64String(hash.GetBytes(16));
}
答案 0 :(得分:0)
Rfc2898DeriveBytes
实现了PBKDF2。在PBKDF2上不太可能进行旁道分析,所以基本上你要问的是PBKDF2的安全性如何。它是NIST也接受的已知安全算法,需要随机盐,高迭代次数和明确定义的密码编码。
现在我们不知道您的参数,但Encoding.UTF8.GetBytes(salt)
并不是好兆头,因为盐应该包含足够的随机性。虽然新生成的GUID可以解决问题,但它来自String
的可能性有点小。最后:我们不知道迭代次数; UTF-8很好。