我正在开发一个使用自定义用户表的项目。该表包含密码字段。目前我们将纯文本密码保存到数据库中。我想问的是如何将密码的哈希值保存到表中?我已经阅读了有关Rfc2898DeriveBytes类的内容,但我不知道如何使用它以及如何生成盐以及从开始到结束整个过程。
你能告诉我采取什么方法吗?
用户表中的每一行都需要一个salt值,如果是这样,我从哪里得到它?
答案 0 :(得分:2)
您使用PBKDF2 / Rfc2898DeriveBytes
走在正确的轨道上。如果您只需要它来散列密码,请查看SimpleCrypto.Net,它基本上是Rfc2898DeriveBytes
周围的薄包装。
使用SimpleCrypto.Net,您可以像这样哈希用户的密码:
private ICryptoService cryptoService = new PBKDF2();
private void SetNewPassword(User user, string newPassword)
{
//a new password hash is generated from a generated salt with the default settings
user.Password = cryptoService.Compute(newPassword);
//assigning the generated salt to the user
user.PasswordSalt = cryptoService.Salt;
}
要检查用户是否输入了正确的密码,请使用相同的盐计算哈希值,并将其与存储在数据库中的哈希值进行比较:
private bool ValidatePassword(User user, string password)
{
//hash the password with the saved salt for that user
string hashed = cryptoService.Compute(password, user.PasswordSalt);
//return true if both hashes are the same
return hashed == user.Password;
}
安全散列密码的另一种可能性是bcrypt。有一个名为BCrypt.Net的实现。
答案 1 :(得分:-2)