繁体   English   中英

如何在不将密码保存在数据库中的情况下对用户进行身份验证

[英]how to authenticate users without saving passwords in database

我正在开发银行演示应用程序。 在我所在的地区,用户登录他们的银行网站并根据他们拥有的两个字段进行一些交易(您可以假设两个密码 - 我们将它们称为 cvv2 和 Second-Password)。 这两个密码仅用于互联网或移动交易。

我确信他们不会将这些密码保存在数据库中; 因为如果他们将这些密码保存在数据库中,那么数据库管理员可以在没有真正用户许可的情况下使用它们并进行虚假交易。

顺便说一句,问题是银行及其网站如何验证用户身份并检查输入的字段(这两个密码)是否正确,但当他们没有将这些密码保存在数据库中时。

今天的大多数银行系统不依赖于简单的密码,它们具有双因素身份验证。 这可以是例如使用您的信用卡生成代码的独立设备,或者至少是TAN列表。

当他们存储密码(通常与其他安全措施结合使用)时,您可以确保他们存储密码的哈希值 哈希是单向的,你无法从中获取原始密码。 用于存储密码的良好哈希算法是BCrypt,PBKDF2或SCrypt,因为它们提供了成本因子。 如果您有兴趣阅读有关该主题的更多信息,可以查看我的教程 ,安全地存储密码。

我对此很陌生,但找到了一种不将密码存储在数据库中并仍对用户进行身份验证的方法。

您可以创建用户名和密码的有效负载,例如“用户名 + 密码”,然后使用 bcrypt 或任何其他算法对其进行哈希处理。

将此哈希值与用户名字段一起存储在数据库中。 这样,密码就不会存储在任何地方。

下次您要进行身份验证时,您可以获取用户名和密码并从中生成哈希值并匹配数据库中存在的值。 只有正确的密码才会产生相同的哈希值。

如果我错了,请纠正我,这有缺陷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM