$1$标记了 MD5-crypt 密码哈希,过去几年也常用于 Linux 系统中的用户密码。在该函数中,它现在几乎已被类似的 SHA256-crypt 和 SHA512-crypt 哈希($5$和$6$)所取代。这些都不是底层散列函数的单次运行,而是重复迭代散列并包含一个盐(第二个和第三个$符号之间的部分,所以mERr。另一方面,e04efcfd...是对 MD5 的单次评估的结果字符串weakpassword。
这些算法的底层结构相当复杂,但除此之外,它们与 PBKDF2 有点相似。可能会为新实现建议其他散列,但兼容性很难。我可以访问的一个 Cisco Catalyst 似乎也支持其他哈希(尝试enable algorith-type ?)。我不知道其他地方是否使用了这些特定算法。
几年前我问了一个关于 PBKDF2 和基于 SHA2 的 crypt 哈希的差异的问题,其中一个答案也提到了 MD5-crypt。
可以使用crypt()glibc 中的函数计算 MD5-crypt 哈希,该函数可以通过例如 Perl 轻松访问:
$ perl -le 'print crypt("weakpassword", q/$1$mERr$/)'
$1$mERr$A4DAiA6cbNxoV7Y2eEVOA0
而普通的 MD5 哈希可以使用该md5sum实用程序计算:
$ printf 'weakpassword' | md5sum
e04efcfda166ec49ba7af5092877030e -
请注意,后者的输出是十六进制的,而$1$crypt 使用 Base64 编码。