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

how to authenticate users without saving passwords in database

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

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

顺便说一句,问题是银行及其网站如何在不将这些密码保存在数据库中的情况下对用户进行身份验证并检查输入的字段(即两个密码)是否正确。

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

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

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

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

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

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

如有不妥之处请指正