如何找到用于哈希密码的哈希算法?


11

我有工作密码,可以看到哈希(/ etc / passwd)。如何找到用于哈希密码的哈希算法,而无需手动尝试其他算法直到找到匹配项?


1
您正在使用哪种Unix变体?
Kusalananda

3
我很惊讶你能看到一个哈希/etc/passwd。我认为所有Unix / Linux变体都已经与/etc/shadow几年前分道扬.。(我知道这样的系统仍支持散列,passwd但我不知道有没有实用程序可以将它们放到那里。也许是嵌入式系统?
roaima

这是OpenWrt Backfire 10.03。哈希仍存储在/etc/passwd这里。但是,这不会改变问题。可以?
Dorin Botan

1
仅作记录:BSD有两个Berkeley DB文件roaima。它仍然是拆分的,但不是/etc/shadow,它们也没有该名称的文件。
JdeBP '18

Answers:


27

这是记录在crypt(3)的手册页,你可以找到通过 shadow(5)的联机帮助,或passwd(5)。这些链接适用于现代的基于Linux的系统;描述如下:

如果salt是一个以“ $ 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,也被确定前缀22b2x,和2y(见PassLib的文档)。

因此,如果哈希密码以上述格式存储,则可以通过查看id找到使用的算法;否则,它crypt是默认的DES算法(带有13个字符的哈希值),或者是“大” crypt的DES(扩展为支持128个字符的密码,最长为178个字符的散列),或BSDI扩展的DES(带有_前缀)然后是19个字符的哈希)。

一些发行版使用libxcrypt,它支持并记录了许多其他方法:

  • y:yescrypt
  • gy:gost-yescrypt
  • 7:加密
  • sha1:sha1crypt
  • md5:SunMD5

其他平台支持其他算法,因此请查看crypt那里的联机帮助页。例如,OpenBSDcrypt(3)仅支持Blowfish,它使用ID “ 2b”进行标识。


2
基于DES的密码的BTW长度始终为13个字符,由字母数字字符以及.和组成/。前2个字符是salt,其他11个字符是哈希值(某种)。而且它是唯一受其支持的算法,该算法crypt是如此之弱,以至于您无法通过选择更强的密码来弥补它。
卡巴斯德(Kasperd),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.