代码之家  ›  专栏  ›  技术社区  ›  Earlz

为什么要在数据库中存储纯文本或加密(而不是散列)密码?

  •  5
  • Earlz  · 技术社区  · 14 年前

    我听过很多在数据库中存储散列密码的理由。但是,在身份验证API中几乎总是可以选择将密码存储为纯文本或加密的。

    有没有一个原因,你想存储一个密码作为纯文本或加密的数据库?

    注意 为了清楚起见,我知道存储非散列密码几乎总是 (据我所知)我的问题是,为什么大多数认证API都包含将密码存储为加密或纯文本的选项。

    9 回复  |  直到 14 年前
        1
  •  6
  •   poke    14 年前

    我能想到的唯一真正的原因是,当数据库属于一个本身以实际应用程序为目标的系统时。例如,当你有程序为你登录某个东西时(电子邮件客户端、即时消息客户端等)。所有这些都必须以可恢复的方式存储密码才能获得访问权限,因为目标应用程序不会在两者之间做出决定 用户通过工具

        2
  •  6
  •   Andrew Cooper    14 年前

    我能想到的一个原因是允许密码恢复选项。无法恢复系统不知道的密码。

    当然,另一种方法是系统只需将密码重置为新密码,然后向您发送新密码。

        3
  •  5
  •   Kobi    14 年前

    也许你是个黑客,想用或卖? It'll be hilarious the first few times this happens.

        4
  •  1
  •   Oyeme    14 年前

    重要的是要明白,密码加密不会保护您的网站,它只能保护您的密码。

    如果你的网站没有足够的保护,密码加密将不会使它从破解安全。如果你的系统被破解了,黑客可以对它造成不可弥补的损害,还可以访问机密信息,包括密码数据库。但如果你将这些信息加密存储,黑客实际上就无法利用这些信息。破解加密密码需要大量的时间和处理能力,即使在今天的计算机上也是如此。

        5
  •  1
  •   blaze    14 年前

    1) 大多数质询-响应认证协议都要求服务器知道明文密码。也有例外,但它们不受欢迎,也很难实施。

    2) 存储密码允许密码恢复。

        6
  •  1
  •   David Cash    14 年前

    任何人都不应该把这一论点作为存储明文密码的一个很好的理由,因为有几个原因它被误导了。

        7
  •  0
  •   Fidi    14 年前

    当然,您可以将所有密码以纯文本形式存储在存储器(例如数据库)中。但不建议这样做。如果有人设法入侵你的服务器,从数据库中获取你的数据,他也会得到所有的密码。在这种情况下,即使只是存储一个用md5这样的常用方法散列的密码也不太省钱。因为有彩虹表(谷歌搜索这个),查找密码。

        8
  •  0
  •   GrandmasterB    14 年前

    我能想到的唯一“好”的理由是,付钱给你开发应用程序的客户或你的经理坚持要这样做。我想不出有什么 原因。

        9
  •  0
  •   PeterMmm    14 年前