【CRYPTO】MD5算法详解

前言

MD5是一种哈希算法,用来保证信息的完整性。
就一段信息对应一个哈希值,且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。
不过MD5算法算出来的值也就16byte(即128bit),肯定存在相同的,找到另一个所花时间长短而已。

填充信息

我们要对一个字符串进行MD5计算,那么肯定要从这个字符串的处理入手。
我们知道一个字符的长度是1个byte,即8bit的长度。
MD5对待加密的字符串的处理是将一个字符串分割成每512bit为一个分组,形如N*512+R,这里的R是余下的位数。这个R分为几种情况:

  • R=0时,需要补位,单补上一个512bit的分组,因为还要加入最后64个位的字符串长度。
  • R<448时,则需要补位到448位,后面添加64位的字符串长度。
  • R>448时,除了补满这一分组外,还要再补上一个512位的分组后面添加64位的原字符串长度。

补位的形式是先填充一个1,再接无数个0,直到补足512位。

举例:
消息内容为“HUANG”,就能得到以下内容

48 55 41 4E 47 80 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 [28 00 00 00 00 00 00 00]低位在左边

最后面这里有个0x28,数8个字节,就是0x0000000000000028,刚刚好是十进制的40,消息的内容是5个byte,也就是40bit
还要注意到这里是小端字节序存储

继续阅读【CRYPTO】MD5算法详解