我正在尝试使用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
在这种情况下,什么我应该存储在数据库中吗?
请,你能帮我吗?我是这个新手,我有点迷路。
都不是。将以下内容保存为单个值:
“ encoded”字段的输出具有误导性,因为您不能as is使用它进行密码检查(即,用于生成哈希),例如m = 262144,其中密码检查需要原始因子m = 18。
每次检查密码时,是否要启动操作系统进程?我不鼓励您这样做。我建议您使用一个库(C ++,Java等)。它们产生一个字符串,其中包含所有用“ $”连接和分隔的所有数据。
我将type
,iterations
,memory
,parallelism
,hash
,salt
和相应的用户ID放在单独的列中,并保留了编码位,因为这只是所有属性在一起。如果它们在不同的列中,则与拆分和索引编码的字符串相比,您可以更轻松地引用属性。
[另一种选择是只将编码后的字符串存储在1列中,但是正如我所说的那样,查看某些属性比较麻烦,因为您必须先拆分编码后的字符串,然后对其进行索引。