哈希与加密密码

时间:2011-02-09 06:07:27

标签: asp.net passwords asp.net-membership

我正在将ASP.NET成员资格用于主要服务于高级用户的网站。我理解散列和加密密码之间的区别,我正在尝试在两者之间做出决定。

在我的上一位客户抱怨哈希密码是一个完整的PITA之后,我开始偏爱加密密码了。但有人认为这不够安全。

所以我的问题是:加密密码的风险究竟是什么?任何能够通过从数据库解密密码来窃取密码的人肯定能够重置它们,如果它们被散列,不是吗?我很难看到有人可能会因加密密码而导致问题,但无法使用加密密码。为用户提供便利也很重要。

4 个答案:

答案 0 :(得分:15)

使用可解密密码的风险是人们使用一个密码进行各种登录和帐户,而不仅仅是您正在处理的应用程序。

  • 使用加密密码,a 被盗/解密的密码可能是 尝试了用户的其他帐户(例如,窃取的银行密码可能会导致他们访问他们的电子邮件)。
  • 使用哈希密码,没有 复苏。盗窃密码哈希值 永远不应该轻易获得可用 密码

将密码视为帐户所有者的财产。用你来查看,解密或做其他事情不属于你。如果用户忘记了密码,则提供重置,而不是检索。

答案 1 :(得分:6)

重点是加密密码可以解密...所以有可能访问密钥等所有密码都可以知道。

哈希(带盐)密码是一个功能,因此实际上没有可能的方法来确定密码是什么,这意味着提供密码的用户不必担心。当然有人可以更改存储位置(例如数据库)的哈希值,以便用户无法再登录,但最初提供的密码仍然不知道。

修改
当你标记ASP.Net这个问题时,我建议使用BCrypt.Net library来生成哈希

答案 2 :(得分:1)

风险在于,可以解密加密密码以获取纯文本密码。

哈希通常无法逆转。

Reversing an MD5 Hash

很常见的情况是人们在其所有网站上使用相同的用户名和密码。

只需要解密一个站点密码,所有用户站点都有风险。

使用哈希时,破解者永远不会获得纯文本密码。

答案 3 :(得分:1)

正如其他用户所说,加密密码可以解密,不是一个好主意。

如果您使用标准哈希技术,那么有权访问您数据库的用户可以使用标准md5作为“密码”。您可以使用salted哈希来解决此问题,该哈希采用输入字符串和salt字符串值来创建无法轻松复制的唯一哈希。将它存放在安全的地方并使用sha1($ salt。$ input)。你现在有一个盐渍哈希。