我正在将ASP.NET成员资格用于主要服务于高级用户的网站。我理解散列和加密密码之间的区别,我正在尝试在两者之间做出决定。
在我的上一位客户抱怨哈希密码是一个完整的PITA之后,我开始偏爱加密密码了。但有人认为这不够安全。
所以我的问题是:加密密码的风险究竟是什么?任何能够通过从数据库解密密码来窃取密码的人肯定能够重置它们,如果它们被散列,不是吗?我很难看到有人可能会因加密密码而导致问题,但无法使用加密密码。为用户提供便利也很重要。
答案 0 :(得分:15)
使用可解密密码的风险是人们使用一个密码进行各种登录和帐户,而不仅仅是您正在处理的应用程序。
将密码视为帐户所有者的财产。用你来查看,解密或做其他事情不属于你。如果用户忘记了密码,则提供重置,而不是检索。
答案 1 :(得分:6)
重点是加密密码可以解密...所以有可能访问密钥等所有密码都可以知道。
哈希(带盐)密码是一个功能,因此实际上没有可能的方法来确定密码是什么,这意味着提供密码的用户不必担心。当然有人可以更改存储位置(例如数据库)的哈希值,以便用户无法再登录,但最初提供的密码仍然不知道。
修改强>
当你标记ASP.Net这个问题时,我建议使用BCrypt.Net library来生成哈希
答案 2 :(得分:1)
风险在于,可以解密加密密码以获取纯文本密码。
哈希通常无法逆转。
很常见的情况是人们在其所有网站上使用相同的用户名和密码。
只需要解密一个站点密码,所有用户站点都有风险。
使用哈希时,破解者永远不会获得纯文本密码。
答案 3 :(得分:1)
正如其他用户所说,加密密码可以解密,不是一个好主意。
如果您使用标准哈希技术,那么有权访问您数据库的用户可以使用标准md5作为“密码”。您可以使用salted哈希来解决此问题,该哈希采用输入字符串和salt字符串值来创建无法轻松复制的唯一哈希。将它存放在安全的地方并使用sha1($ salt。$ input)。你现在有一个盐渍哈希。