/etc/shadow 中的哈希值是如何生成的?

Nav*_*vid 6 hash shadow

我正在阅读关于影子文件的维基百科文章,它提到行的格式是这样的:

$id$salt$hashed
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,它是如何工作的?

我试图为我自己拥有密码的帐户计算哈希值,因此我使用了以下命令:

sha512sum {盐}+{my_clear_text_password}

但是输出与我自己看到的哈希不同。那么它是怎样工作的?我错过了什么?

pkh*_*mre 1

shadow(5)手册页

\n\n
\n

加密密码

\n\n

有关如何解释该字符串的详细信息,请参阅crypt (3)。

\n\n

例如,如果密码字段包含某些字符串,该字符串不是crypt (3) 的有效结果!或*,用户将无法使用unix密码登录(但用户可以通过其他方式登录系统)。

\n\n

该字段可能为空,在这种情况下,不需要密码即可作为指定的登录名进行身份验证。但是,如果密码字段为空,某些读取 /etc/shadow 文件的应用程序可能会决定根本不允许任何访问。

\n\n

以感叹号开头的密码字段表示密码已锁定。该行的其余字符代表密码被锁定之前的密码字段。

\n
\n\n

crypt(3)手册页

\n\n
\n

crypt()是密码加密函数。它基于数据加密标准算法,其变化旨在(除其他外)阻止使用密钥搜索的硬件实现。

\n\n

key 是用户输入的密码。

\n\n

salt 是从集合 [a\xe2\x80\x93zA\xe2\x80\x93Z0\xe2\x80\x939./] 中选择的两个字符的字符串。该字符串用于以 4096 种不同方式之一扰乱算法。

\n\n

通过取密钥前 8 个字符中每个字符的最低 7 位,即可获得 56 位密钥。这个56位密钥用于重复加密一个常量字符串(通常是全零组成的字符串)。返回的值指向加密的密码,一系列 13 个可打印 ASCII 字符(前两个字符代表盐本身)。返回值指向静态数据,其内容会被每次调用覆盖。

\n
\n