MD5 的输出是二进制的:一个 128 位的序列,通常编码为 16 个字节(技术上是 16个八位字节,但让我们使用字节为八位字节的常见约定)。
人类不读取位或字节。他们读字符。有许多代码页告诉如何将字符编码为字节,以及类似地,将字节解码为字符。对于几乎所有这些(因为ASCII),低值字节(0 到 31)是“控制字符”,因此不能真正表示为字符。所以没有人真正直接读取 MD5 输出。如果有人正在“读取”哈希值,那么这些值很可能会使用少数常见的约定之一编码成字符。两种最流行的约定是十六进制和Base64。
对于十六进制,只有数字和字母 'a' 到 'f'(传统上是小写的哈希值)。你不会得到“盐我!” 在十六进制输出中...
对于 Base64,编码使用所有 26 个不重读的拉丁字母(小写和大写)、数字以及“+”和“/”符号。因此,您可以期待“SaltMe”或“SALTME”。现在这是可行的,因为 Base64 中的每个字符都编码 6 位,因此 6 个字母的输出仅对应于 36 位。寻找产生“SaltMe”或“SALTME”的密码将在(平均)2 35次尝试中完成,即在几分钟或几小时内使用一些经过适当优化的代码。
但是请注意,实际上花一些时间阅读 Base64 编码的哈希值的人可能有一些,比如说,“社会问题”,因此可能不会像您希望的那样做出反应。
它完成了:当使用 MD5 进行散列时,然后对结果进行 Base64 编码:
infjfieq
产量: SALTMEnBrODYbFY0c/tf+Q==
lakvqagi
产量: SaltMe+neeRdUB6h99kOFQ==