在c#中使用salt加密密码

时间:2011-09-01 15:39:05

标签: c# encryption cryptography aes password-protection

我搜索了一些代码来执行此操作,但发现了一些预先定义的盐。我想为每个用户自动生成salt并将salt值存储在表中。谢谢我是编程新手请帮助

1 个答案:

答案 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