散列密码或加密密码是否好

本文关键字:密码 是否 加密 | 更新日期: 2023-09-27 17:56:07

可能的重复项:
散列密码和加密
密码之间的区别 哈希与加密密码

我尝试使用 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));
}

上面的方法给了我一些哈希值。我的问题是

是否可以取回我的密码,以便在用户忘记密码时向用户显示密码?或我是否需要在这里实现其他概念,例如加密和解密它?但我听说散列比加密更好。

谢谢!

散列密码或加密密码是否好

您绝对应该对密码使用单向哈希。你的目标不应该是在用户忘记它时能够检索它。要做的是允许用户将其密码(在经过某种识别过程后)重置为全新的密码。

您无法反转哈希,因此如果用户忘记密码,则为"不可恢复"。 您不希望将加密的密码存储在数据库中,而是希望存储这些哈希值。 如果用户忘记了密码,您将生成一个新的临时安全密码(在正确识别用户是他们所说的用户之后)。

密码应该用盐散列,否则它们很快就会被彩虹表破坏。

安全的角度来看,散列密码而不是加密密码确实要好得多。 您必须管理用于加密密码的密钥,如果您未能保证其安全(您可能会针对坚定的攻击者),那么攻击者可以以明文形式获取所有用户密码。

如果要提供忘记密码机制,最好将电子邮件发送到存档的地址,并让用户创建新密码。 或实施安全问题。 或者两者兼而有之。