有效地将给定令牌与数据库中的散列,盐渍令牌进行比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有效地将给定令牌与数据库中的散列,盐渍令牌进行比较相关的知识,希望对你有一定的参考价值。

我正在使用令牌在我的应用程序中实现身份验证。

生成令牌时,实际令牌将发送到客户端以存储在cookie中,而散列令牌将与散列期间使用的salt一起保存在数据库中。

现在,为了验证用户,我必须将给定的令牌与数据库中保存的令牌进行比较,这似乎需要检查数据库中的每个条目,因为salt对于每个令牌都是唯一的。

重申一下,我必须做以下事情:

for saved_token in all_saved_tokens:
   hashed_token = hash_token_with_salt(actual_hash_from_client, saved_token.salt)
   if hashed_token == saved_token.hashed_token:
       return saved_token.user

由于这需要在每次通话时发生,因此看起来非常低效。

所以问题是:

鉴于我存储有关令牌的信息,我可以以某种方式更有效地做到这一点吗?

我当然可以将用户的用户名存储在cookie中并将其与密码一起传递给密码,以便我可以缩小数据库中的搜索范围,但理想情况下我更愿意只使用令牌来保持整洁和整洁。 。

答案

为什么不将散列标记保存到db并在散列标记上添加索引,这样就不需要迭代了

以上是关于有效地将给定令牌与数据库中的散列,盐渍令牌进行比较的主要内容,如果未能解决你的问题,请参考以下文章

密码重置令牌存储 - 值应该被散列吗?

比较来自不同网络服务器的散列​​密码

Laravel密码经纪人门面

检查散列的 REST API 令牌

JavaScript数据结构——实现简单的散列表

CSRF 令牌生成