【发布时间】:2022-01-21 05:53:42
【问题描述】:
我们开发了一个移动应用程序,它使用手机号码和 otp 进行身份验证。由于电话号码是敏感用户信息的一部分,我们必须对其进行加密或哈希处理,以降低泄露用户敏感数据的风险。
当用户登录时,在 otp 之后,我必须从 db 中获取用户信息,为此,我必须运行查询以匹配数据库中的用户电话。加密工作正常,因为我可以解密手机,然后匹配登录电话号码。但是,由于用户数量众多,速度较慢
我的另一个选择是对电话号码进行哈希处理。然后我可以将登录电话号码与数据库中的散列电话进行散列。但是,由于相同的电话号码不会生成相同的哈希,因此无法进行比较
另一种方法是使用哈希检查功能,但当您针对从数据库获取的单行登录电话的单个值时,可以单独使用该功能。
我想知道是否可以在 laravel 查询中使用散列匹配,以便将散列的登录用户电话号码与数据库中的散列电话号码进行检查。
如果有人可以为此提供解决方案,我将不胜感激。
问候
【问题讨论】:
-
“但是,由于相同的电话号码不会生成相同的哈希,因此无法进行比较”为什么不呢?哈希是可重现的,例如,尝试在终端中运行命令:
php -r "echo hash('sha256', '867-5309');",您会发现无论运行多少次,输出都是相同的。 -
再补充一点,如果您不能通过从相同的未散列数据开始多次复制散列,那么散列首先会有什么可能的价值?如果是这种情况,任何程序将如何完成密码验证?这类似于只是删除原始数据并用随机字符替换它。
-
在 laravel 中,hash::make 函数每次使用不同的 salt 来为同一个字符串生成不同的 hash。您可以使用另一个函数 Hash::check('plain-text', $hashedtext) 如果两个哈希都来自相同的文本,它将返回 true。但是,此函数不能在查询中使用。您必须先获取所需的行,然后运行上述函数
-
好的,那为什么不使用一种不同的散列函数,就像我上面提到的那样?
标签: mysql laravel encryption hash laravel-authentication