MD5算法原理

阅读数:100 评论数:0

跳转到新版页面

分类

算法/数据结构

正文

MD5,即“Message-Digest Algorithm 5”(信息-摘要算法),从名字来看就知道它是从MD3、MD4发展而来的一种加密算法,其主要通过采集文件的信息摘要,从此进行计算并加密。

MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为:求余、取余、调整长度、与链接变量进行循环运算。

1、填充编码

在MD5算法中,首先需要对信息进行填充,使其位长对512求余结果等于448。因此,信息的位长将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的事面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

2、装入标准的幻数(四个整数)

标准的幻数(物理顺序)是A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16.

3、处理分组数据

一次子循环的过程如上图,F是一个非线性函数,Mi表示一个32-bits的输入数据,Ki表示一个32-bits常数。

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组(Mi)。

所以一个MD5运算由N+1大循环组成(512位),每一个大循环分成16子循环(32)。