0

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

我尝试通过将用户名作为其盐值传递,使用 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));
}

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

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

谢谢!

4

3 回答 3

7

您绝对应该对密码使用单向哈希。如果用户忘记了它,您的目标不应该是能够检索它。要做的事情是允许用户将他们的密码(经过某种识别过程后)重置为全新的密码。

于 2013-01-24T19:26:09.560 回答
4

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

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

于 2013-01-24T19:26:56.867 回答
0

从安全的角度来看,散列密码而不是加密密码确实要好得多。你必须管理你用来加密密码的密钥,如果你不能保证它的安全(你可能会反对一个坚定的攻击者),那么攻击者可以得到你所有用户的明文密码。

如果您想提供忘记密码的机制,最好向存档的地址发送电子邮件并让用户创建一个新密码。或实施安全问题。或者两者都做。

于 2013-01-24T19:27:22.047 回答