`/etc/shadow`中的加密密码格式

use*_*206 3 encryption shadow

我在/etc/shadow. 我不太明白它的格式。

$y$j9T$F5Jx5fExrKuPp53xLKQ..1$X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7
Run Code Online (Sandbox Code Playgroud)

它由四部分组成,如下所示。据crypt(5)yyescrypt

https://manpages.debian.org/unstable/libcrypt-dev/crypt.5.en.html

- y
- j9T
- F5Jx5fExrKuPp53xLKQ..1
- X3DX6M94c7o.9agCG9G317fhZg9SqC.5i5rd.RhAtQ7
Run Code Online (Sandbox Code Playgroud)

最后三部分是什么意思?

7he*_*.tk 5

crypt(3)函数各部分的含义是什么”的答案:

  • id
  • param
  • salt
  • hash

正如这里更详细的解释。

关于新的yescrypt“密码哈希方案”,第二个字段的含义可以通过阅读this来理解,如果你想了解更多信息,你也可以阅读yescrypt v2规范

我做了一些更多的研究,似乎散列是在函数yescrypt_r 中发生的。您可以在代码中看到不同的参数定义。
idis的情况下7N设置为2^xwhere xis 的第一个数字中的数字param,然后 r 和 p 都使用decode64_uint32_fixedparam字段其余部分的函数进行解析。
在所有其他情况下(即仅当idis 时y,因为该函数检查 的值id并返回,如果它不是7y),源代码有条件地设置了各种不同的参数,代码块的编写方式让我觉得试图理解它会违背原作者的意愿。所以我把它留给读者作为练习。

在同一个文件中,它后面的函数yescrypt公开了一个更简单的接口,类似于crypt(3).

  • 据我了解,密码是经过哈希处理而不是加密的。 (2认同)
  • @not2savvy,是的,您不加密密码,因为没有必要将它们转回纯文本,所以您_不_希望这很容易完成。参见例如https://security.stackexchange.com/q/211/118457 (2认同)
  • 参数的混淆编码几乎感觉像是不使用该哈希的一个很好的理由...... (2认同)
  • @not2savvy `crypt()` 的第一个版本实际上确实用你的密码加密了一个固定的字符串,因此这个名称并不反映今天的处理。 (2认同)