2

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

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

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

因此,本质上,加密仅与您的在线 CMS 或服务器的登录信息相关程度高吗?

提前致谢!

4

3 回答 3

7

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

通常做的是获取密码的哈希值,并将其存储在数据库中。哈希是一种单向函数。不可能逆转它并得到结果。为了检查密码是否正确,测试密码(用户输入的密码)用盐重新散列,看它是否与之前的密码匹配。

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

于 2012-09-10T14:11:20.860 回答
3

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

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

于 2012-09-10T14:11:28.520 回答
0

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

于 2012-09-10T14:12:16.977 回答