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


What is the point of encrypting passwords in a database?

有人能帮我确认一下吗:

在将密码保存到数据库中时加密密码的意义是否在于,如果数据库被黑客入侵,黑客将无法知道实际的密码,除非他/她有算法和salt等来解密密码,因此无法使用相同的密码破坏这个或其他帐户?

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

因此,本质上,加密只有当您的登录信息与您的在线CMS或服务器强大时才相关?

提前感谢!

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

通常所做的是获取密码的散列,并将其存储在数据库中。散列是一个单向函数。扭转这种局面并取得结果是不可能的。为了检查密码是否正确,将测试密码(用户输入的内容)与salt重新散列,以查看它是否与以前的has匹配。

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

您没有抓住要点。您不将加密密码存储在数据库中,而是将密码哈希存储在数据库。

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

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