我如何在数据库中存储Argon2密码?

问题描述 投票:2回答:2

我正在尝试使用Argon2算法将用户密码存储在数据库中。

这是我通过使用它获得的:

$echo -n "password" | argon2 "smallsalt" -id -t 4 -m 18 -p 4
Type:           Argon2id
Iterations:     4
Memory:         262144 KiB
Parallelism:    4
Hash:           cb4447d91dd62b085a555e13ebcc6f04f4c666388606b2c401ddf803055f54ac
Encoded:        $argon2id$v=19$m=262144,t=4,p=4$c21hbGxzYWx0$y0RH2R3WKwhaVV4T68xvBPTGZjiGBrLEAd34AwVfVKw
1.486 seconds
Verification ok

在这种情况下,什么我应该存储在数据库中吗?

  • 上面显示的“已编码”值?
  • 上面显示的“哈希”值?
  • 都不是,但是另一个解决方案?

请,你能帮我吗?我是这个新手,我有点迷路。

hash passwords
2个回答
2
投票

都不是。将以下内容保存为单个值:

  • 算法ID(例如argon2id)
  • 迭代次数(4)
  • 内存使用率(18)
  • 平行度(4)

“ encoded”字段的输出具有误导性,因为您不能as is使用它进行密码检查(即,用于生成哈希),例如m = 262144,其中密码检查需要原始因子m = 18。

每次检查密码时,是否要启动操作系统进程?我不鼓励您这样做。我建议您使用一个库(C ++,Java等)。它们产生一个字符串,其中包含所有用“ $”连接和分隔的所有数据。


1
投票

我将typeiterationsmemoryparallelismhashsalt和相应的用户ID放在单独的列中,并保留了编码位,因为这只是所有属性在一起。如果它们在不同的列中,则与拆分和索引编码的字符串相比,您可以更轻松地引用属性。

[另一种选择是只将编码后的字符串存储在1列中,但是正如我所说的那样,查看某些属性比较麻烦,因为您必须先拆分编码后的字符串,然后对其进行索引。

© www.soinside.com 2019 - 2024. All rights reserved.