【问题标题】:What is the point of encrypting passwords in a database?在数据库中加密密码有什么意义?
【发布时间】:2012-09-03 10:09:48
【问题描述】:

有人可以帮我确认一下吗:

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

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

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

提前致谢!

【问题讨论】:

  • 不是你的私人研究助理:phpsec.org/articles/2005/password-hashing.html
  • 投票结束是题外话,因为它与实际的编程问题无关。我认为它更适合security.stackexchange.com
  • 用于加密密码的加密算法(SHA1、MD5 等)是不可逆的。这是一种单向加密。
  • 为什么投反对票?这是一个好问题(可能更适合安全性),但也是一个好问题。它向人们展示了想要了解他们的代码在做什么以及如何改进它而不是盲目地遵循教程的人。来自我的 +1。
  • @Brad 借调重新开放。这肯定会包含对其他用户非常有用的信息。

标签: php security passwords


【解决方案1】:

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

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

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

【讨论】:

  • 感谢 Brad(和 Fluffeh)的耐心和理解。我认为我缺少的关键是使每种盐都独一无二的概念。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多