| 论文摘要:在信息加密中,采用报文摘要的方法不但可以节省加密时间,还可以节省报文传输和存储的开销。在目前提出多种报文摘要中,应用最广的就是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 下一页 尾页 |