我搜索了一些代码来执行此操作,但发现了一些预先定义的盐。我想为每个用户自动生成salt并将salt值存储在表中。谢谢我是编程新手请帮助
答案 0 :(得分:9)
(正如所建议的那样,我已经用更安全的东西取代了我以前的盐生成方法)
生成随机盐:
public static string GenerateRandomSalt(RNGCryptoServiceProvider rng, int size)
{
var bytes = new Byte[size];
rng.GetBytes(bytes);
return Convert.ToBase64String(bytes);
}
var rng = new RNGCryptoServiceProvider();
var salt1 = GenerateRandomSalt(rng, 16);
var salt2 = GenerateRandomSalt(rng, 16);
// etc.
RNGCryptoServiceProvider
用于生成“加密强随机值”,使其比标准Random
类更适合在此使用。但是,如果生成salt,则可以使用您选择的算法将其附加到密码和哈希值:
var salt = GenerateRandomSalt(rng, 16);
var hashedPassword = DoPasswordHashing(password + salt);
然而,值得指出的是,正确进行用户身份验证可能比看起来更困难。 Eric Lippert几年前撰写了一系列博客文章:http://blogs.msdn.com/b/ericlippert/archive/2005/01/28/you-want-salt-with-that-part-one-security-vs-obscurity.aspx