加密数据库中的密码有什么意义?

时间:2012-09-10 14:09:02

标签: php security passwords

有人可以为我确认以下内容:

在将密码保存到数据库时加密密码的重点是,如果数据库被黑客攻击,那么黑客将无法知道实际的密码,除非他/她有算法和盐等来解密它,因此无法使用相同的密码破坏此帐户或其他帐户?

但我的主要问题是:可能是密码是在例如将密码保存到数据库中的PHP脚本中加密的,因此在该脚本中清除了解密密码的算法。因此,如果黑客入侵到网站的服务器或内容管理系统,他/她将能够访问该脚本并解密密码,这是正确的吗?

所以基本上加密只与您的在线CMS或服务器的登录信息相关性很强?

提前致谢!

3 个答案:

答案 0 :(得分:7)

您的密码不应在数据库中加密。

通常做的是获取密码的哈希值,并将其存储在数据库中。哈希是一种单向函数。无法逆转它并获得结果。要检查密码是否正确,请使用盐对测试密码(用户输入的密码)进行重新散列,以查看它是否与之前的密码匹配。

这样,如果有人获得数据库的副本,他们只知道哈希,这需要花费相当长的时间才能找到碰撞(匹配)。为每个密码添加唯一的salt可确保具有相同密码的用户具有不同的哈希值,这意味着必须为每个密码执行查找哈希冲突的工作(非常慢)。

答案 1 :(得分:3)

你错过了这一点。您不将加密密码存储在数据库中,而是在数据库中存储密码哈希值。

您不想解密密码,您希望将存储的哈希与计算的哈希进行比较!

答案 2 :(得分:0)

密码实际上并未加密。它们实际上是通过单向哈希算法进行哈希处理的。这意味着“理论上”,攻击者不应该能够反转哈希。问题是:许多初学Web开发人员将使用快速的散列算法。这意味着查找表的使用成为一个问题,其中脚本可用于散列一大堆字典单词,然后将它们与数据库中的散列密码进行比较。