什么是FreeBSD MD5,为什么它生成的哈希值不是十六进制表示法?

3
我正在参加Hack This Site的一个黑客挑战,我找到了一个密码哈希值,并通过暴力破解的方式破解了它。我的哈希破解工具(John the Ripper)使用的格式被称为“FreeBSD MD5”。密码和哈希如下: PW: shadow HASH: $1$AAODv...$gXPqGkIO3Cu6dnclE/sok1
我的问题是,MD5通常只有0123456789abcdef(十六进制)字符集,为什么这个哈希值突然包含了一堆其他字符?
截图: enter image description here
1个回答

5
这是一个加盐密码哈希:
  • $ 是字段分隔符
  • 1 是类型(MD5)
  • AAODv... 是哈希的(明文)盐
  • gXPqGkIO3Cu6dnclE/sok1 是以base64编码的哈希值
在哈希之前,将盐与密码连接起来以防止彩虹表攻击:md5(salt + password)),要验证密码,必须在哈希之前添加此盐前缀。
使用base64表示哈希使它比十六进制数字更短一些(23比32字节)。

天啊,我应该想到使用加盐哈希 - 我想我在密码学方面还不够经验。但是为什么Base64表示会占用更少的空间呢?虽然它肯定会有较少的字符,我想这就是你的意思吗? - Brandon
是的,在像/etc/shadow这样的文本文件中,使用更少的字符可以占用更少的空间。 - Ctx
我看到十六进制数字和二进制数字在文本文件中以8位而不是4位存储,这是由于编码的原因吗? - Brandon
1
是的,在文本文件中,每个字符使用8个比特(在常见系统上)。所以,字符越少 -> 节省空间。 - Ctx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接