MD5算法是一种单向散列算法(任意长度的消息运算) 128位
1.数据填充
填充消息使其长度与448模512同余 (即长度=448 mod 512)
与就是说,填充后的消息长度比512的倍数仅小64位。即使消息长度本省已经满足了上述长度要求也需要填充,填充方法是: 附在一个1在消息后面,然后用0来填充,直到消息的长度与448模512同余,至少填充1位,至多填充512位。
2.添加长度
在上一步的结果之后附上64位的消息长度。如果填充前消息的长度大于2**64,则只使用其低64位。添加填充和消息长度之后,其中N是16的倍数。
令M [0...N-1] 表示最终的消息,其中N是16的倍数。
3.初始化变量
用4个变量 ( A, B, C, D ) 来计算消息摘要
这些寄存器以下面的十六进制数来初始化
A = 01234567h B = 89abcdefh C = fedcba98h D = 76543210h
左移若干位,最后将所得结果加上a,b,c,d之一,并回送至A,B,C,D。由此完成一次循环。而且,在内存中是以低字节在前的形式存储的
即如下的格式
01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10
数据处理
以512位分组为单位处理消息。
首先定义4个辅助函数,每个都以3个32位双字作为输入,输出1个32位双字
其中,"&" 是与操作。"|"是或操作。"~"是非操作。 "^"是异或操作。
这4轮变换是对进入主循环的512位消息分组的16个32位字分别如下操作:将A,B,C,D的副本a,b,c,d中的3个经F,G,H,I运算后的结果与第四个相加,再加上32位和一个32位字的加法常数,并将所得之值循环左移若干位,最后将所得结果加上a,b,c,d之一,并回送至A,B,C,D,由此完成一次循环。
在Python中进行MD5加密就很赞了。