在将密码放入数据库之前对其进行哈希处理

时间:2013-08-28 10:07:11

标签: password-encryption

我正在开发一个使用自定义用户表的项目。该表包含密码字段。目前我们将纯文本密码保存到数据库中。我想问的是如何将密码的哈希值保存到表中?我已经阅读了有关Rfc2898DeriveBytes类的内容,但我不知道如何使用它以及如何生成盐以及从开始到结束整个过程。

你能告诉我采取什么方法吗?

用户表中的每一行都需要一个salt值,如果是这样,我从哪里得到它?

2 个答案:

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