VC411 MD5算法的研究与实现VC
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
MD5的全称[3]〖本文来自:计算机毕业网 〗是Message-Digest algorithm 5(信息--摘要算法),MD5是一种不可逆的算法,即对生成的密文求逆,对应着无穷多个逆。在90年代初由MIT Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L.Rivest开发出来,经MD2,MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(把一个任意长度的字节串变换成一定长的大整数)。不管是MD2,MD4还是MD5,它们都需要获得一个随机长度的信息,并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但是MD2的设计与MD4和MD5完全不同,是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。Rivest在1989年开发出MD2算法,在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数,然后,以一个16位的检验和追加到信息末尾,并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud发现,如果忽略了检验和,那样就将产生MD2冲突。MD2算法的加密后结果是唯一的---即没有重复。 think58好,好think58 [资料来源:http://think58.com]
随着网络技术的广泛应用,网络信息安全越来越引起人们的重视。最初的计算机应用程序通常没有或很少有安全性,那是因为当时的系统是专属和封闭的,简单地说,计算机之间虽然也交换数据和信息,但形成的网络完全在组织控制之下。在那个时候,计算机之间通信的协议也是不公开的,因此,别人很难访问交换的信息。同时,因为当时信息安全并不是个重要问题,所以导致了很多人都忽略了数据的安全性,直到后来人们真正的认识和了解到数据的重要性。而选该毕业设计,主要是针对数据在存储的时候存在大量的安全问题,并且在现有MD5加密算法基础上,提出了一种数据存储加密策略。同时,针对md5算法而进行进一步的了解和研究。
〖本文来自:计算机毕业网 〗
我们都知道,散列值越长则安全性越好,MD5算法就是单向散列函数产生128位的散列值,以此保证了它的安全性,以下即为生成一个长散列值的方法:
1)运用单向散列函数生成一则消息的散列值。
2)将该散列值附于消息之后。
3)产生包含散列值和消息在内的一连串的数值的散列值。
4)将第一步产生的散列值与第三步产生的散列值组合起来生成一个更大的散列值。
5)重复1)至3)步若干次。
2.2 MD5算法的基本原理
MD5算法以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由4个32位分组组成,将它们级联形成一个128位散列值[5]。
think58好,好think58
第1步::填充
MD5的第1步是在原消息中增加填充位,目的是使原消息长度等于一个值,即比512的倍数少64位。例如,如果原消息长度为1000位,则要填充472位,使消息长度为1472位,因为64+1472=1536,是512的倍数(1536=512*3)。
这样,填充后,原消息的长度为448位(比512少64),960位(比1024少64位),1472位(比1536少64位),等等。
think58
这四轮中的第1步进行不同处理,其他步骤是相同的。
---每一轮有16个输入子块M[0],M[1],…,M[15],或表示为M[i],其中i为1~15。我们知道,每个子块为32位。
---t是个常量数组,包含64个元素,每个元素为32位。我们把数组t的元素表示为t[1],t[2],…,t[64],或t[i],其中i为1~64。由于有四轮,因此每一轮用64个t值中的16个。
下面总结这四轮的迭代。每一轮输出的中间和最终结果复制到寄存器abcd中,注意,每一轮有16个寄存器。
1)首先对b, c, d作一次非线性函数运算,这个运算在四轮中不同。
2)变量a加进第1步的输出(即寄存器abcd)。
3)消息子块M[i]加进第2步的输出(即寄存器abcd)。 copyright think58 [资料来源:http://www.THINK58.com]
I(x,y,z) = y^(x|(~z))
(&是与,|是或,~是非,^是异或)
这些函数是这样设计的:如果x,y和z的对应位是独立和均匀的,那么结果的每一位也是独立和均匀的,函数F是按逐位方式操作;如果X,那么Y,否则Z,函数H是逐位奇偶操作。
设Mi表示消息的第i个子分组(从0到15)。<<<S表示循环左移S位,则四种操作为:
FF(a,b,c,d,Mi,s,ti)表示 a=b+((a+(F(b,c,d)+Mi+ti)<<<s)
GG(a,b,c,d,Mi,s,ti)表示 a=b+((a+(G(b,c,d)+Mi+ti)<<<s)
HH(a,b,c,d,Mi,s,ti)表示 a=b+((a+(H(b,c,d)+Mi+ti)<<<s)
II(a,b,c,d,Mi,s,ti)表示 a=b+((a+(I(b,c,d)+Mi+ti)<<<s)
这四轮(64步)是:
第一轮〖本文来自:计算机毕业网 〗
FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)
FF(b,c,d,a,M3,22,0xclbdceee)
FF(a,b,c,d,M4,7, 0xf57c0faf)
FF(d,a,b,c,M5,12,0x4787c62a)
FF(c,d,a,b,M6,17,0xa8304613)
FF(b,c,d,a,M7,22, 0xfd469501)
FF(a,b,c,d,M8,7, 0x698098d8)
FF(d,a,b,c,M9,12,0x8b44f7af)
FF(c,d,a,b,M10,17,0xffff5bb1)
FF(b,c,d,a,M11,22,0x895cd7be) 内容来自think58 [资料来源:www.THINK58.com]
FF(a,b,c,d,M12,7, 0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
FF(b,c,d,a,M15,22,0x49b40821)
第二轮
GG(a,b,c,d,M1,5,0xf61e2562)
GG(d,a,b,c,M6,9,0xc040b340)
GG(c,d,a,b,M11,14,0x265e5a51)
GG(b,c,d,a,M0,20,0xe9b6c7aa)
think58 [资料来源:http://THINK58.com]