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

时间:2010-09-16 06:51:12

标签: database security encryption passwords

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

您是否有理由将密码存储为纯文本或在数据库中加密?

注意要明确我知道存储非散列密码几乎总是错误。(据我所知)我的问题是为什么大多数身份验证API包括将密码存储为加密或纯文本的选项。

9 个答案:

答案 0 :(得分:6)

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

当然,替代方案是系统只需将密码重置为新密码并向您发送新密码。

答案 1 :(得分:6)

我能想到的唯一真正原因是数据库属于一个本身就是真实应用程序的系统。就像你有程序为你登录的东西(电子邮件客户端,即时通讯客户端等)。所有这些都必须以可恢复的方式存储密码才能获得访问权限,因为目标应用程序不会通过工具来决定真实用户用户。正是在这一点上,OAuth和alikes都是为了保存用户的密码。

答案 2 :(得分:5)

也许你是黑客,想要使用或出售它们? It'll be hilarious the first few times this happens.

答案 3 :(得分:1)

即使您非常确定数据库的安全性,所有管理员仍可访问您的用户密码。

了解密码加密不会保护您的网站至关重要,它只能保护您的密码。

如果您的网站没有足够的保护,密码加密将无法安全地破解。如果您的系统遭到破解,黑客可能会对其造成无法挽回的损害,并且还可以访问机密信息,包括密码数据库。但是,如果您将这些信息加密存储,黑客几乎无法使用它。破解加密密码需要大量的时间和处理能力,即使在今天的计算机上也是如此。

答案 4 :(得分:1)

1)大多数Challenge-Response认证协议要求服务器知道明文密码。有例外,但它们不受欢迎且难以实施。

2)存储密码可以恢复密码。

答案 5 :(得分:1)

我几次遇到以下争论:

存储明文密码可以让您检测用户何时将密码更改为接近旧密码的内容,即通过递增数字,添加“1”或其他低条件熵更新方法。

没有人应该将这个论点作为存储明文密码的正当理由 - 出于多种原因这是错误的。

答案 6 :(得分:0)

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

所以我建议存储盐渍密码。我不知道为什么你会把你的密码存储为纯文本。我不会这样做:))

答案 7 :(得分:0)

一个原因可能是为另一个外部服务自动重用密码。

如果我配置我的Gmail帐户以从其他非谷歌电子邮件提供商检索我的电子邮件,我必须给谷歌我的密码和谷歌必须明确密码才能将我的邮件发送到我的Gmail帐户。

这显然与主要服务的密码不同,但无论如何它都是“密码类型”。

答案 8 :(得分:0)

我能想到的唯一“好”理由是,付费给您开发应用的客户或您的经理坚持要求。我无法想到任何技术的原因。