可能重复:
Difference between Hashing a Password and Encrypting it
Hashing vs. Encrypting Passwords
我尝试使用Rfc2898DeriveBytes在C#中散列我的密码,方法是将用户名作为其 盐值。
public string HashPassword(string HashedUsernameSalt, string Password)
{
Rfc2898DeriveBytes HashedPass = new Rfc2898DeriveBytes(Password,
System.Text.Encoding.Default.GetBytes(HashedUsernameSalt), 10000);
return Convert.ToBase64String(Hasher.GetBytes(25));
}
上面的方法给了我一些哈希值。我的问题是
是否有可能取回我的密码以显示用户是否忘记了密码? 要么 我是否需要在此处实现其他一些概念,如加密和解密?,但我听说哈希比加密更好。
谢谢!
答案 0 :(得分:7)
您绝对应该对密码使用单向散列。如果用户忘记了,您的目标应该是无法检索它。要做的是允许用户将密码(经过某种识别过程后)重置为一个全新的密码。
答案 1 :(得分:3)
你无法反转哈希,所以如果用户忘记密码则不会“不可恢复”。您不希望将加密密码存储在数据库中,而是希望存储这些哈希值。如果用户忘记了密码,您将生成一个新的临时安全密码(在正确识别用户是他们所说的用户之后)。
密码应该用盐进行哈希处理,否则很快就会被彩虹表破坏。
答案 2 :(得分:0)
如果您想提供忘记密码机制,最好将电子邮件发送到文件地址并让用户创建新密码。或者实施安全问题。或两者都做。