论文摘要:在信息加密中,采用报文摘要的方法不但可以节省加密时间,还可以节省报文传输和存储的开销。在目前提出多种报文摘要中,应用最广的就是MD5。本文针对MD5报文摘要算法进行了深入研究,分析了算法的安全性,通过程序开发对算法进行了实现,总结了MD5加密算法的应用。
论文关键词:信息加密,报文摘要
1.引言
在信息加密中,采用报文摘要的方法不但可以节省加密时间,还可以节省报文传输和存储的开销。目前,提出的多种报文摘要中,应用最广的一种就是MD5加密算法。MD5算法的全称为Message-DigestAlgorithm5(信息-摘要算法),是90年代初由RonRivest设计的一种单向哈希函数,经MD2、MD3和MD4发展而来。其作用是让大容量信息在用数字签名软件签署私人密匙之前被'压缩'成一种保密的格式,即把一个任意长度的字节串变换成一定长的大整数,输入是任意长度的信息,输出是128位消息摘要(Message-Digest),以一种充分复杂的方式将各比特打乱,每个输出比特都受每一个输入比特的影响。
本文针对MD5报文摘要算法进行了深入研究,分析了算法的安全性,通过程序开发对算法进行了实现,并总结了MD5加密算法的应用。
2.算法的描述
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值,见图1MD5加密算法原理。采用MD5报文摘要算法产生报文摘要的全过程包括以下五个步骤:
①填充,使报文长度为512的倍数减64。对明文输入按512bit分组,填充使其成为512bit的整数倍,且最后一组的后64bit先空出。
②附加长度,将填充前的报文长度写入最后的64比特,总长度N=L×512。填充位数为1~512bit,填充数字图样为(100…0),得Y0,Y1,…YL-1。
③初始化MD缓存,4个32bit的寄存器。每轮输出为128bit,可用下述四个32bit字:A,B,C,D表示,其初始存数以十六进制表示为:(A,B,C,D),共128bits,其中:
A=01234567;B=89ABCDEF;C=FEDCBA98;D=76543210
④处理每个报文分组:处理每个报文分组(512bits),算法的核心是4轮循环的压缩函数。其中,Y表示输入的第q组512bit数据,在各轮中参加运算。T[1,2,…64]为64个元素表,分四组参与不同轮的计算。T[i]是232*abs(sine(i))的整数部分,i是弧度。可用32bit二元数表示,T是32bit的随机数源。
⑤输出报文摘要。所有L个512bit的分组处理完之后,第L阶段的输出便是128bit的报文摘要。

图1:MD5报文摘要算法原理
在MD5算法中,首先,需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(BitsLength)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法为:在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充;然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度;经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。
MD5主循环有四轮,是四轮运算,各轮逻辑函数不同。每轮又要进行16步迭代运算,四轮共需64步完成。每次操作对A、B、C和D中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量。再将所得结果向右环移一个不定的数,并加上A、B、C或D中之一。最后,用该结果取代A、B、C或D中之一。以下是每次操作中用到的四个非线性函数(每轮一个),如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F是一个逐位运算的函数。即如果X,那么Y,否则Z。函数H是逐位奇偶操作符。
F(X,Y,Z)=(X&Y)|((~X)&Z);
G(X,Y,Z)=(X&Z)|(Y&(~Z));
H(X,Y,Z)=X^Y^Z;
I(X,Y,Z)=Y^(X|(~Z))(其中,&是与,|是或,~是非,^是异或)
3.算法的实现
根据MD5算法描述,本文通过程序实现,程序中输入要处理的明文,最终输出只显示16进制的MD5值。要设计算法中应用到的子函数FF(),GG(),HH(),II()以及他们所要调用到的F(),G(),H(),I()函数;接下来是四轮循环,每轮16次。执行结果如下:
①将要处理的明文设定为:01234567
程序执行结果为:feeaffffa24b0000fb7c000073f4ffff
②将要处理的明文设定为:abcdefg
程序执行结果为:c1150000659affffbecbffff36430000
③将要处理的明文设定为:11111111
程序执行结果为:152a0000a6deffff121000008a070000
从以上程序的执行结果可以看出,MD5可以把一个任意长度的字节串变换成一定长的大整数,输入是任意长度的信息,输出是128位消息摘要。 1/2 1 2 下一页 尾页 |