我有工作密码并且可以看到哈希值(/etc/passwd)。如何找到用于散列密码的散列算法,而无需手动尝试不同的算法直到找到匹配项?
答案1
这记录在crypt(3)
的联机帮助页,你可以找到通过 shadow(5)
的联机帮助页, 或者passwd(5)
的。这些链接适用于现代基于 Linux 的系统;那里的描述是:
如果盐是一个以字符“$开头的字符串ID$”后跟一个可选地以“$”结尾的字符串,则结果的形式为:
$id$salt$encrypted
ID标识使用的加密方法而不是 DES,然后确定如何解释密码字符串的其余部分。支持以下 id 值:
ID | Method ───────────────────────────────────────────────────────── 1 | MD5 2a | Blowfish (not in mainline glibc; added in some | Linux distributions) 5 | SHA-256 (since glibc 2.7) 6 | SHA-512 (since glibc 2.7)
河豚,也称为bcrypt
,也通过前缀2
、2b
、2x
和进行识别2y
进行识别(请参阅PassLib 的文档)。
因此,如果散列密码以上述格式存储,您可以通过查看来找到所使用的算法ID;否则它是crypt
默认的 DES 算法(具有 13 个字符的哈希值),或“big”crypt
的 DES(扩展为支持 128 个字符的密码,哈希值长度可达 178 个字符),或 BSDI 扩展 DES(具有_
前缀后跟 19 个字符的哈希值)。
y
: 是的加密gy
: gost-yescrypt7
: 加密sha1
: sha1cryptmd5
:SunMD5
其他平台支持其他算法,因此请检查crypt
那里的联机帮助页。例如,OpenBSD 的crypt(3)
仅支持 Blowfish,它使用ID“2b”。