我听过很多关于在数据库中存储哈希密码的原因。然而,在身份验证API中几乎总是有存储明文或加密密码的选项。
是否有理由将密码作为明文或加密文本存储在数据库中呢?
注意:要明确的是,我知道存储非哈希密码几乎总是不好的。(至少据我所知)我的问题是,为什么大多数身份验证API包括将密码存储为加密文本或明文的选项。
我听过很多关于在数据库中存储哈希密码的原因。然而,在身份验证API中几乎总是有存储明文或加密密码的选项。
是否有理由将密码作为明文或加密文本存储在数据库中呢?
注意:要明确的是,我知道存储非哈希密码几乎总是不好的。(至少据我所知)我的问题是,为什么大多数身份验证API包括将密码存储为加密文本或明文的选项。
我能想到的一个原因是为了提供密码恢复选项。如果系统不知道密码,就无法恢复密码。
当然,另一种选择是让系统将密码重置为新密码,并将新密码发送给您。
1)大多数挑战-响应身份验证协议要求服务器知道明文密码。有例外,但它们不受欢迎且难以实现。
2)存储密码允许密码恢复。
当然,您可以将所有密码作为明文存储在您的存储(例如数据库)中。但这不被推荐。如果有人成功入侵您的服务器并从数据库中获取您的数据,则他也会获得每个密码。即使只是使用常见方法(如md5)哈希存储密码,在这种情况下也不太安全。因为有彩虹表(请搜索谷歌),可用于查找密码。
因此,我建议存储盐加密的密码。我不知道为什么您会将密码存储为明文。我不会这样做 :)
一个原因可能是为了自动重用密码到另一个外部服务。
如果我配置我的Gmail帐户从其他非Google电子邮件提供商检索我的电子邮件,我必须向Google提供我的密码,并且Google必须以明文形式拥有此密码才能将我的邮件放入我的Gmail帐户中。
这显然不是主要服务的相同密码,但它仍然是“密码类型”的。