我的 Web 应用程序向客户端发布 API 密钥,我想在我的数据库中散列 API 密钥。但是,似乎如果我遵循最佳实践,即每个哈希都有不同的盐,那么我就无法通过我的数据库中的 API 密钥查找用户。
所以我的问题是,哪种哈希算法是 2023 年的“最先进”算法?
例子:
假设我的用户已获得一个 api 密钥,
my-api-key
。如果我使用 argon2id 将该密码存储在数据库中,我有以下哈希:
argon2id$19$8192$1$1$7eMA1uCGC2U$aIqS05xbn0DXdXNUKbDG1A
当用户进行 API 调用时,它可能看起来像这样(实际上它不会作为查询参数传递):
GET https://www.example.com?api_key=my-api-key
我希望能够说(伪代码):
hashed_api_key = hash("my-api-key")
SELECT * FROM users WHERE api_key = hashed_api_key
但是,每次调用
hash()
时,都会使用随机盐,因此我有不同的输出:
argon2id$19$8192$1$1$vrDlrC4Qkmo$1lEogx/KgrJyPVS40Xgd+Q
argon2id$19$8192$1$1$D/8tzjThXNo$OsX5f4HjdJM5h5aENFk4DQ
使用散列 API 密钥进行数据库查找的最佳实践是什么?我应该使用没有随机盐的 argon2 吗?还是有不同的最佳实践?