MD5算法:过程的基本解释

信息安全 哈希 md5
2021-09-09 07:07:19

谁能解释一下MD5算法所涉及的基本思想和步骤?

我尝试在网络上阅读它(维基百科等),但它对我来说太高了。

那么,有人可以用非常粗略的方式解释整个过程,以便我以后可以通过书籍或网站了解更详细的版本吗?

1个回答

理解 MD5 最简单的方法是从规范中实现它,这是相当简单的。

用非常粗俗的话来说:

  1. 要散列的数据是位序列。让我们保持简单,假设它是一个字节序列。一些额外的字节(“填充”)附加到该序列,因此额外字节的数量在 9 到 72(包括)之间,填充后的总长度是 64 的倍数。规范解释了填充; 基本上有很多零,以及输入数据长度的编码。

  2. 填充的数据被分成 64 字节的块。块将被一一处理。每个块(64 字节)的处理将作为前一个块处理的输出的 128 位值(16 字节)作为输入,并输出一个新的 128 位值。

  3. 由于第一个块没有前一个块,因此使用常规的固定值来启动该过程。MD5 规范详细说明了该值。

  4. 完整的 MD5 输出是处理最后一个块后得到的 128 位值。

单个块的处理将从前一个块获得的 128 位值和要处理的新块拆分为 32 位字(前一个值的 4 个字,块的 16 个字)。所有计算都是用这些 32 位字完成的。整体结构被描述为类似于侧卧的加密算法:在广义的 Feistel 方案中,64 字节块用作加密 128 位运行状态的一种密钥。我知道这样的断言并不能真正解释事情——要真正了解算法中发生的事情,请使用您最喜欢的编程语言并尝试实现它。

(任何语言都应该适合这样的任务,因为它只是关于学习,但有些不如其他语言好。例如,Javascript 的数字实际上是浮点值,这对于实现 MD5 很麻烦。Java 和 C# 适合这样的任务,特别是因为它们具有保证 32 位长度的整数类型,这正是 MD5 所需要的。)

您可能还想阅读这个答案,它试图解释为什么哈希函数是“单向”的,并以 MD5 为例,因此它包含了对 MD5 的描述。