毕业设计md5算法的研究与实现数据存储加密论文管理资料.docx
- 文档编号:27550280
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:40
- 大小:273.17KB
毕业设计md5算法的研究与实现数据存储加密论文管理资料.docx
《毕业设计md5算法的研究与实现数据存储加密论文管理资料.docx》由会员分享,可在线阅读,更多相关《毕业设计md5算法的研究与实现数据存储加密论文管理资料.docx(40页珍藏版)》请在冰豆网上搜索。
毕业设计md5算法的研究与实现数据存储加密论文管理资料
毕业设计(论文)
MD5算法的研究与实现
------数据存储加密
论文作者姓名:
申请学位专业:
申请学位类别:
指导教师姓名(职称):
论文提交日期:
MD5算法的研究与实现
------数据存储加密
摘要
随着网络技术的广泛应用,网络信息安全越来越引起人们的重视。
针对数据在存储的时候存在大量的安全问题,目前通常将需要存储的数据进行加密然后再存储,应用MD5算法是一个不错的选择。
MD5算法的全称是Message-Digestalgorithm5,是一种用于产生数字签名的单项散列算法。
它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式,即将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的串。
该毕业设计是运用microsoftvisualc++,主要是通过算法实现数据的加密存储。
文章分成五部分。
第一,二部分描述了MD5的目前现状和相关理论知识,也让我们了解MD5的定义。
重点是MD5的流程实现和封装DLL。
在MD5算法的DLL封装这章,主要是描述我们为什么要选用封装DLL的原因,以及封装的好处。
设计流程这一部分里包含读取,修改,插入,删除这几个功能的实现情况,并用流程图的方式来分别描述了这四大功能模块的实现过程。
最后一部分显示了系统测试的内容和系统主要功能运行界面图。
关键词:
信息安全;MD5;加密;封装
TheResearchandImplementationforMD5Algorithm
--------DataStorageandEncryption
Abstract
Withthewideapplicationofthenetworktechnology,theinformationofthenetworksafetycausespeople'sattentionmoreandmore.Alargenumberofsecurityquestionsappearwhilestoringdata,thedatathatusuallystoreneedingatpresentareencryptedthenstored,itisagoodchoicetouseMD5algorithm.ThefullnameofMD5algorithmisMessage-Digestalgorithm5,isthatakindofindividualeventusedforproducingfiguresandsignedbreaksupandarrangesalgorithms.Itsfunctionistoletlargecapacityinformation"compress"andbecomeakindofsecretformbeforesigningtheprivatekeywiththedigitalsignaturesoftware,vary"bytebunch"ofawantonlengthintoagreatintegerofone128bitthroughanirreversibleonebunchofalgorithmsofvaryingofcharacter.
UsedMicrosoftVisualC++softwareanddevelopedinthisgraduationproject,ismainlytorealizethroughthealgorithmthattheencryptionofthedataisstored.Thearticleisdividedintofiveparts.ThefirstandsecondpartsaredescribingthecurrentsituationandrelevanttheoryknowledgeatpresentofMD5,letusunderstandthedefinitionofMD5.ThefocalpointistheprocedureofMD5isrealizedandencapsulationtoDynamicLinkLibrary.InthischapterofencapsulationMD5classlibrarytoDynamicLinkLibrary,mainlydescribewhywewillselectencapsulationDynamicLinkLibraryforuse,andtheadvantageofencapsulation.Designthisofprocedureandincludereadinginthepart,revise,insert,deletetherealizationsituationsofthesefunctions,andhasdescribedtherealizationcourseofthisfourmajorfunctionsmodulerespectivelyinwayoftheflowchart.Thelastparthasshownthatthecontentofsystemtestingandmainfunctionofsystemoperatetheinterfacepicture.
Keywords:
informationsecurity;MD5;encrypt;Packaging
论文总页数:
23页
1引言
随着网络通信技术和Internet的联系日益增强,出现了一系列与网络安全相关的问题:
如对主机的攻击,网络上传输的信息被截取、篡改、重发等,由此,它对网络应用的进一步推广构成了巨大威胁,因此密码体制[1]就在这种背景下应运而生了。
存储加密涉及大量文件、资料、新建等文档处理,需要高效,可靠的进行各种信息交换,同时对信息流转的整个过程需要有效的组织和监控。
对数据的安全存储和安全传输具有较高的要求。
数据加密技术不仅具有保证信息机密性的信息加密功能,而且具有数字签名、秘密分存、系统安全等性能。
因而可以保障信息的机密性、完整性和准确性,防止信息被篡改、伪造和假冒[2]。
虽然目前已有很多加密技术应用于各个领域,但是存在加密强度、运算量大等缺陷,因而本文提出了一种新的加密机制—MD5加密。
同时,在竞争日趋激烈的今天,只有实行对数据加密的加强管理,建设性提高信息安全在网络中的地位,以至在竞争中求生存,以期更好地发展下去。
1.1研究现状
MD5的全称[3]是Message-Digestalgorithm5(信息--摘要算法),MD5是一种不可逆的算法,即对生成的密文求逆,对应着无穷多个逆。
在90年代初由MITLaboratoryforComputerScience(IT计算机科学实验室)和RSADataSecurityInc(RSA数据安全公司)的Ronald,经MD2,MD3和MD4发展而来。
它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(把一个任意长度的字节串变换成一定长的大整数)。
不管是MD2,MD4还是MD5,它们都需要获得一个随机长度的信息,并产生一个128位的信息摘要。
虽然这些算法的结构或多或少有些相似,但是MD2的设计与MD4和MD5完全不同,是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。
Rivest在1989年开发出MD2算法,在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数,然后,以一个16位的检验和追加到信息末尾,并且根据这个新产生的信息计算出散列值。
后来,Rogier和Chauvaud发现,如果忽略了检验和,那样就将产生MD2冲突。
MD2算法的加密后结果是唯一的---即没有重复。
为了加强算法的安全性,Rivest在1990年又开发出MD4算法。
MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod512=448。
然后,一个以64位二进制表示的信息的最初长度被添加进来。
信息被处理成512位迭代结构的区块,而且每个区块要通过三个不同步骤的处理。
DenBoer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。
Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果),毫无疑问,MD4就此被淘汰掉了。
一年以后,即1991年,Rivest开发出技术上更为趋近成熟的MD5算法。
它在MD4的基础上增加了“安全-带子”(safety-belts)的概念。
虽然MD5比MD4稍微慢一些,但却更为安全。
这个算法很明显的由四个和MD4设计有少许不同的步骤组成。
在MD5算法中,信息--摘要的大小和填充的必要条件与MD4完全相同。
DenBoer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。
VanOorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-forcehashfunction),而且他们猜测一个被设计专门用来搜索MD5冲突的机器可以平均每24天就找到一个冲突,但单从1991年到2001年这10年间,竟没有出现替代MD5算法的新算法,我们可以看出这个瑕疵并没有太多的影响MD5的安全性。
而所有这些都不足以成为MD5在实际应用中的问题,并且由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下,MD5可以算是比较安全的了。
1.2选题意义
随着网络技术的广泛应用,网络信息安全越来越引起人们的重视。
最初的计算机应用程序通常没有或很少有安全性,那是因为当时的系统是专属和封闭的,简单地说,计算机之间虽然也交换数据和信息,但形成的网络完全在组织控制之下。
在那个时候,计算机之间通信的协议也是不公开的,因此,别人很难访问交换的信息。
同时,因为当时信息安全并不是个重要问题,所以导致了很多人都忽略了数据的安全性,直到后来人们真正的认识和了解到数据的重要性。
而选该毕业设计,主要是针对数据在存储的时候存在大量的安全问题,并且在现有MD5加密算法基础上,提出了一种数据存储加密策略。
同时,针对md5算法而进行进一步的了解和研究。
1.3选题背景
现阶段,信息安全性已成为全社会共同关心问题,密码学研究也越来越被人们所关注。
密码学主要研究的是通讯保密。
近年来,密码学研究之所以十分活跃,主要原因是它与计算机科学的蓬勃发展息息相关。
由于公共和私人部门的一些机构越来越多的应用电子数据处理,将数据存储在数据库中,因此防止非法泄露,删除,修改等是必须重视的问题。
对数据进行加密能够防止他人盗取需要保密的信息,但这只是解决了一方面的问题,至于如何防止他人对重要数据进行破坏,如何确定交易者的身份,以及如何防止日后发生纠纷时交易者抵赖,还需要采取其它的手段,这一手段就是数字签名。
数字签名技术实际上是在数据加密技术基础上的一种延伸应用。
数字签名经常和单向散列(Hash)函数一起使用,而单向散列(Hash)函数是现代密码学的核心。
最常见的散列算法有MD5,SHA和Snefru,MD5是当今非常流行的优秀的典型Hash加密技术。
本毕业设计主要是对MD5算法进行研究,并在此基础上编程实现MD5算法函数,并实现封装;开发一个简单的数据存储程序验证算法的正确性和可用性。
2相关理论基础
2.1单向散列函数
单向散列函数[4]也称Hash(哈希)函数。
它是现代密码学的核心。
散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。
而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算出它的散列值,但要使它的散列值等于一个特殊值却很难。
散列函数是公开的,对处理过程并不保密,单向散列函数的安全性是它的单向性,其输出不依赖于输入。
平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。
已知一个散列值,要找到预映射的值,使它的值等于已知的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。
如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那么,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那么可以肯定他持有那份文件。
2.1.1单向散列函数的基本原理
单向散列函数H(M)是对一个任意长度的消息M进行运算。
返回一个固定长度的值h。
h=H(M)
其中h的长度为m。
输入为任意长度且输出为固定长度的函数有很多种,但意向散列函数具有使其单向的如下特性:
1)给定值M,可以很方便地计算出h值。
2)给定h,根据H(M)=h计算M很难。
3)给定M,要找到另一则消息M'并使得H(m)=H(m')很难。
也就是说,如果某个入侵者想要获得一则消息,他必须破坏掉每个运用单向函数的协议的安全性,因为单向性函数的关键在于产生M的一个唯一的消息摘要。
事实上,单向散列函数是建立在压缩函数的思想基础之上的。
单向散列函数的输出值为一个长度为n的散列值,该长度比输入值的长度m要小很多,即n 进行该函数运算的前提条件是我们应根据一定规则将消息分成若干个消息片段,散列函数的输入值是一个消息片段和前一个消息片段的输出值,而其输出值则是该消息片段前所有消息片段的散列值。 这也就是说,消息片段M的散列值的计算方法可表示为: 该过程可图示如下: Mihi Hi-1 图1 同时该散列值又将作为下一步运算的输入值之一,由此推算可知,整个消息的散列值n即为最后一个消息片段经计算所得的散列值。 这样,我们最终得到的将是一个固定长度的函数值。 2.1.2散列值的长度 我们都知道,散列值越长则安全性越好,MD5算法就是单向散列函数产生128位的散列值,以此保证了它的安全性,以下即为生成一个长散列值的方法: 1)运用单向散列函数生成一则消息的散列值。 2)将该散列值附于消息之后。 3)产生包含散列值和消息在内的一连串的数值的散列值。 4)将第一步产生的散列值与第三步产生的散列值组合起来生成一个更大的散列值。 5)重复1)至3)步若干次。 2.2MD5算法的基本原理 MD5算法以512位分组来处理输入文本,每一分组又划分为16个32位子分组。 算法的输出由4个32位分组组成,将它们级联形成一个128位散列值[5]。 第1步: : 填充 MD5的第1步是在原消息中增加填充位,目的是使原消息长度等于一个值,即比512的倍数少64位。 例如,如果原消息长度为1000位,则要填充472位,使消息长度为1472位,因为64+1472=1536,是512的倍数(1536=512*3)。 这样,填充后,原消息的长度为448位(比512少64),960位(比1024少64位),1472位(比1536少64位),等等。 图2填充过程 填充对用一个1位和多个0位进行填充。 如果消息长度已经是448,则要填充512位,使长度变成960位。 因此,填充长度为1~512的值。 图2显示了填充过程。 第2步: 添加长度 增加填充位后,下一步要计算机消息原长,将其加进填充后的消息末尾。 先计算消息长度,不包括填充位(即增加填充位前的长度)。 例如,如果原消息为1000位,则填充472位,使其变成比512的倍数(1536)少64位,但长度为1000,而不是1472。 这个消息原长表示为64位值,添加到加进填充后的消息末尾,如图3所示。 如果消息长度超过264位(即64位无法表示,因为消息太长),则只用长度的低64位,即等于计算lengthmod264。 我们看到,这时消息长度为512的倍数,成为要散列的消息。 图3添加长度 第3步: 将输入分成512位的块 下面要将输入分成512位的块,如图4所示。 图4将输入分成512块 第4步: 初始化链接变量 第4步要初始化四个链接变量,分别称为A,B,C,D,它们都是32位的数字,这些链接变量的初始十六进制值如表1所示,低的字节在前面。 表1链接变量 注意低位的字节在前面指的是LittleBndian平台上内存中字节的排列方式,而在程序中书写时,要写成: A=0x01234567 B=Ox89abcdef C=Oxfedcba98 D=0x76543210 第5步: 处理块 初始化之后,就要开始实际算法了。 这是个循环,对消息中的多个512位块运行。 : 将四个链接变量复制到四个变量a,b,c,d中,使a=A,b=B,c=C,d=D,如图5所示, 图5将四个链接变量复制到四个变量中 实际上,这个算法将a,b,c,d组合成128位寄存器(abcd),寄存器(abcd)在实际算法运算中保存中间结果和最终结果,如图6所示。 图6链接变量抽象视图 : 将当前512位块分解为16个子块,每个子块为32位,如图7所示。 图7将当前512块分解为16个子块 : 主循环有四轮,每轮很相似。 每一轮的操作,都要处理一个块中的16个子块。 每一轮的输入如下: (a)16个子块;(b)变量a,b,c,d;(c)常量t,如图8所示。 图8每一轮处理 这四轮中的第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)。 4)常量t[i]加进第3步输出(即寄存器abcd)。 5)第4步的输出(即寄存器abcd)循环左移s位。 6)变量b加进第5步输出(即寄存器abcd)。 7)第6步的输出成为下一步的新abcd。 图9和图10显示了MD5操作过程。 图9MD5主循环 图10MD5的一个执行过程 以下是每次操作中用到的四个线性函数(每轮一个),简单的说,就是布尔运算。 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)) (&是与,|是或,~是非,^是异或) 这些函数是这样设计的: 如果x,y和z的对应位是独立和均匀的,那么结果的每一位也是独立和均匀的,函数F是按逐位方式操作;如果X,那么Y,否则Z,函数H是逐位奇偶操作。 设Mi表示消息的第i个子分组(从0到15)。 << FF(a,b,c,d,Mi,s,ti)表示a=b+((a+(F(b,c,d)+Mi+ti)<< GG(a,b,c,d,Mi,s,ti)表示a=b+((a+(G(b,c,d)+Mi+ti)<< HH(a,b,c,d,Mi,s,ti)表示a=b+((a+(H(b,c,d)+Mi+ti)<< II(a,b,c,d,Mi,s,ti)表示a=b+((a+(I(b,c,d)+Mi+ti)<< 这四轮(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) 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) GG(a,b,c,d,M5,5,0xd62f105d) GG(d,a,b,c,M10,9,0x02441453) GG(c,d,a,b,M15,14,0xd8a1e681) GG(b,c,d,a,M4,20,0xe7d3dbc8) GG(a,b,c,d,M9,5,0x21e1cde6) GG(d,a,b,c,M14,9,0xc33707d6) GG(c,d,a,b,M3,14,0xf4d50d87) GG(b,c,d,a,M8,20,0x455a14ed) GG(a,b,c,d,M13,5,0xa9e3e905) GG(d,a,b,c,M2,9,0xfcefa3f8) GG(c,d,a,b,M7,14,0x676f02d9) GG(b,c,d,a,M12,20,0x8d2a4c8a) 第三轮 HH(a,b,c,d,M5,4,0xfffa3942) HH(d,a,b,c,M8,11,0x8771f681) HH(c,d,a,b,M11,16,0x6d9d6122) HH(b,c,d,a,M14,23,0xfde5380c) HH(a,b,c,d,M1,4,0xa4beea44) HH(d,a,b,c,M4,11,0x4dbecfa9) HH(c,d,a,b,M7,16,0xf6bb4b60) HH(b,c,d,a,M10,23,0xbebfbc70) HH(a,b,c,d,M13,4,0x289b7ec6) HH(d,a,b,c,M0,11,0xeaa127fa) HH(c,d,a,b,M3,16,0xd4ef3085) HH(b,c,d,a,M6,23,0x04881d05) HH(a,b,c,d,M9,4,0xd9d4d039) HH(d,a,b,c,M12,11,0xe6db
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 md5 算法 研究 实现 数据 存储 加密 论文 管理 资料