首页 > 解决方案 > 仅使用密码对用户进行身份验证

问题描述

我需要为我正在构建的快速应用程序创建一个身份验证系统。客户要求拥有一个仅使用 4 位密码的密码系统。在创建新用户时,我有代码设置来保存和散列 pin 与其余用户信息,并且该项目只是一个内部服务器,因此它不需要处理大量用户。

我的问题是让用户重新登录。我正在使用 bycrypt 对密码进行哈希处理,但 bycrypt 会为相同的字符串生成一个全新的哈希值。

我遇到的麻烦是通过执行WHERE hash=hashSQL 搜索来获取用户。但这是行不通的,因为即使密码相同,哈希每次都不同。

我可以获取所有用户并遍历所有用户并使用 bycrypt 的.compare方法。但从长远来看,随着用户数量的增长,这不会奏效,并且 bycrypt 的构建是为了在 cpu 上花费很长时间来帮助防止暴力攻击。

我还可以构建自己的散列函数。但是,这样就可以了,所以我必须为每个用户存储一个盐,以使每个密码都是唯一的。那么这会带来相同的问题,即相同的字符串没有相同的哈希值。

我知道这很模糊,但我需要一些帮助来想办法通过使用散列密码获取用户来获取用户。

标签: javascriptpostgresqlexpressnpmcryptography

解决方案


只需将 PIN 存储为纯文本即可。在 4 位 PIN 上使用散列函数只会提供一种虚假的安全感。如果只有 10,000 个可能的输入,即使是故意缓慢的散列函数也很容易暴力破解。

我遇到的麻烦是通过执行WHERE hash=hashSQL 搜索来获取用户

您是说您甚至不知道此人声称自己是谁,而是使用 4 位密码作为声明和证明?听起来您构建的系统只是假装安全。


推荐阅读