我对 mkpasswd 命令结果有疑问,我必须在其中使用相同的单词来重现一遍又一遍散列的相同结果,但是如果我没有使用 -S 选项,这将创建一个带有加盐随机单词的散列密码,会发生什么,所以这是我的问题:
带 -S 选项。-
password: p4ssw0rd
word: 22446688
output: $6$22446688$kQPZPIx3oZHwJ/l1xteaU5CqM0m7IoglQPFtDwUSMYCUAHkRUAIAfETjvgJmXhwLm4NVI5DHTXYt9d25cnZN3/
结果将始终相同 ****
没有 -S 选项。-
输出:
$6$nLtu32Q.5ZtRwK9x$z51ORpMvbOmxRj2IveXlqZnBZI16Fnvn4HQA7JBAFIPbhTI/gugtq0XCS3bBl80JBTDrROrm9emMpyRaZt0Pv0
结果会不断变化****
当我一遍又一遍地使用这个词时,结果是相同的,当我不使用这个词时,结果是不同的,所以我的问题是,如果我采用不带 -S 选项的选项并用于加密密码,我如何保证当输入密码时将进行比较并且将是相同的,因为我只有密码,但我不知道盐词,因为这是可选的并且随机分配的?或者这并不重要,因为该单词与密码的散列一起存储并且不需要知道它?
答案1
使用盐值的要点是每个盐值的结果都会不同。对每个密码使用相同的盐会抵消使用盐的优势。
至于验证密码的函数如何知道使用了哪种盐,盐被存储为密码哈希的一部分。第一个实现使用前两个字符表示盐,后跟哈希值。现在密码哈希的格式是由$
符号分隔的一些字段。第一个字段指定所使用的算法,然后是可选参数、salt 值和哈希本身。
在你的情况下,输出包含你的盐值,22446688
$6$22446688$...
在第二个命令中,盐是一个随机值,nLtu32Q.5ZtRwK9x
$6$nLtu32Q.5ZtRwK9x$...
密码验证获取完整的字符串,包括算法和salt,因此可以验证密码。