为什么不存储原始密码?

时间:2010-06-24 06:58:49

标签: security passwords

我是网络开发的新手。我可以存储用户的原始密码吗?我知道好的做法是使用salt存储散列密码,但为什么我们不存储原始密码?

是因为数据库很容易被黑客入侵,所以哈希保护密码?还有其他原因吗?如果没有,我想存储原始密码,如果合法的话。

5 个答案:

答案 0 :(得分:18)

合法性取决于您所居住的国家。但也有最好的做法。最佳做法是加密用户的密码。这样,如果有人闯入您的数据库,他们将无法获得长密码列表,并在ebay,yahoo mail和gmail中尝试其中的每一个。用户通常会为许多网站使用同一对用户名和密码。

正如Jon在评论中指出的那样,哈希和加密之间当然存在差异。散列是一种单向的,数据破坏性的过程,它将任意长度的字符串作为输入,并输出一个固定长度的字符串。此字符串以这样的方式定义,即更改原始输入中的任何单个位将导致散列不同。因此,如果您有哈希值,则无法重建原始文本(即无法恢复密码)。

另一方面,正确加密是一种可以恢复原始密码,知道密钥,密码等的技术。

通常,您希望哈希密码,而不是加密密码:它不是必需的,而且设置起来更复杂。您也不应该恢复密码:您只需重新生成它们。

答案 1 :(得分:1)

想象一下,如果Facebook遭到黑客攻击,它并没有加密任何用户的密码。 Facebook本身拥有约2亿(?)用户

如果所有2亿个密码泄露给某个邪恶的组织怎么办?许多用户使用相同的密码作为他们的邮件或任何其他敏感的在线服务,如银行会计。

一旦Facebook完全不安全。你会在那里注册一个帐户吗?

答案 2 :(得分:1)

我不知道这是否合法,但至少有三个原因我会反对它:

  1. 这不仅仅是黑客可以访问您的密码。用户通常拥有多个帐户的相同密码(他们也不应该拥有)。那么谁说我们可以信任您或其他合法访问这些数据的人呢?
  2. 您认为服务器的安全性无关紧要。服务器没有absolut安全性这样的东西。您应该考虑最终可能被黑客入侵。并且不要相信它永远不会发生。希望最好,但总是计划最坏的!
  3. 我会使用每一个简单而廉价的安全措施,不仅可以保护我的数据,还可以保护用户的数据。并且使用salt + hash的方法很便宜。这将花费你2行代码。它

答案 3 :(得分:0)

是的,它完全合法,但绝对不建议以明文存储密码。并不是说您的实际实时数据库可能会受到损害:即使是备份副本也可能被盗(您根本不知道)。

当密码被盗时,这对您的实际用户来说非常糟糕,因为他们中很少有人会为不同的网站使用不同的密码。

答案 4 :(得分:0)

依法是合法的。有些公司以纯文本形式存储密码,因此可以恢复。

然而,出于安全原因,这是一个坏主意。有一段时间,一些公司被黑客入侵,他们的数据库被访问。在某些情况下,这会暴露数千名用户的密码。这将严重损害您公司的形象,并且在密码未经过哈希处理时更具安全风险。

如果您希望密码可以恢复,请至少对其进行加密,以便通过访问数据库来轻松查看密码。