![为什么使用 sha512 散列的影子密码包含 99 个字符而不是 129 个字符?](https://linux22.com/image/1405339/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%20sha512%20%E6%95%A3%E5%88%97%E7%9A%84%E5%BD%B1%E5%AD%90%E5%AF%86%E7%A0%81%E5%8C%85%E5%90%AB%2099%20%E4%B8%AA%E5%AD%97%E7%AC%A6%E8%80%8C%E4%B8%8D%E6%98%AF%20129%20%E4%B8%AA%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我的 Linux 配置为使用sha512
。然而,该/etc/shadow
文件包含只有 99 个字符的哈希密码。为什么是 99 而不是 129(64*2+1)?请注意,我在确保系统设置为使用 sha512 后更改了密码。
请查看输出:
# grep sha512 /etc/pam.d/system-auth-ac
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
# grep ENCRYPT_METHOD /etc/login.defs
ENCRYPT_METHOD SHA512
# grep root /etc/shadow
root:$6$YwkRWeVN$z4Z7OKuohyyT/4gZgnOkKSWPaMvx1eCHFGNCiyFZx1QYydrEArO.HdH2JGCfosXg0sTnZFFdJnfw5QgfUqovO1:16175:0:99999:7:::
请注意,密码哈希以 开头,$6$
因此表示它是sha512
哈希。
答案1
哈希以 base64 格式存储,这意味着一个字符编码 6 位。因此需要 512 / 6 = 86(四舍五入)个字符。
哈希从第三个(不是第二个)$ 开始,到下一个冒号结束,正好是 86 个字符。YwkRWeVN
第二个和第三个 $ 之间的字符串称为盐。