浅析MD5算法的原理及应用.docx
《浅析MD5算法的原理及应用.docx》由会员分享,可在线阅读,更多相关《浅析MD5算法的原理及应用.docx(15页珍藏版)》请在三一文库上搜索。
1、浅析MD5算法的原理及应用摘要随着网络技术的广泛应用,网络信息平安越来越引起人们的重视。针对数据在存储的时候存在大量的平安问题,目前通常将需要存储的数据进行加密然后再存储,应用MD5算法是一个不错的选择。MD5算法的全称是Message-Digestalgorithm5,是一种用于产生数字签名的单项散列算法。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式,即将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的串。该毕业设计是运用microsoftvisualc+6.0软件而开发的,主要是通过算法实现数据的加密存储。文章分成五局部。第一
2、二局部描述了MD5的目前现状和相关理论知识,也让我们了解MD5的定义。重点是MD5的流程实现和封装DLLo在MD5算法的DLL封装这章,主要是描述我们为什么要选用封装DLL的原因,以及封装的好处。设计流程这一局部里包含读取,修改,插入,删除这几个功能的实现情况,并用流程图的方式来分别描述了这四大功能模块的实现过程。最后一局部显示了系统测试的内容和系统主要功能运行界面图。关键词:信息平安;MD5;加密;封装TheResearchandImplementationforMD5AlgorithmDataStorageandEncryptionAbstractWiththewideapplicati
3、onofthenetworktechnology,theinformationofthenetworksafetycausespeoplesattentionmoreandmore.Alargenumberofsecurityquestionsappearwhilestoringdata,thedatathatusuallystoreneedingatpresentareencryptedthenstored,itisagoodchoicetouseMD5algorithm.ThefullnameofMD5algorithmisMessage-Digestalgorithm5,isthatak
4、indofindividualeventusedforproducingfiguresandsignedbreaksupandarrangesalgorithms.Itsfunctionistoletlargecapacityinformation,compress,andbecomeakindofsecretformbeforesigningtheprivatekeywiththedigitalsignaturesoftware,vary,bytebunch*ofawantonlengthintoagreatintegerofone128bitthroughanirreversibleone
5、bunchofalgorithmsofvaryingofcharacter.UsedMicrosoftVisualC+6.0softwareanddevelopedinthisgraduationproject,ismainlytorealizethroughthealgorithmthattheencryptionofthedataisstored.Thearticleisdividedintofiveparts.Thefirstandsecondpartsaredescribingthecurrentsituationandrelevanttheoryknowledgeatpresento
6、fMD5,letusunderstandthedefinitionofMD5.ThefocalpointistheprocedureofMD5isrealizedandencapsulationtoDynamicLinkLibrary.InthischapterofencapsulationMD5classlibrarytoDynamicLinkLibrary,mainlydescribewhywewillselectencapsulationDynamicLinkLibraryforuse,andtheadvantageofencapsulation.Designthisofprocedur
7、eandincludereadinginthepart,revise,insert,deletetherealizationsituationsofthesefunctions,andhasdescribedtherealizationcourseofthisfourmorfunctionsmodulerespectivelyinwayoftheflowchart.Thelastparthasshownthatthecontentofsystemtestingandmainfunctionofsystemoperatetheinterfacepicture.KeyWordsnnformatio
8、nsecurity;MD5;encrypt;Packaging论文总页数:23页1引言11.1研究现状11.2选题意义21.3选题背景22相关理论根底31. 1单向散列函数3单向散列函数的根本原理3散列值的长度42. 2MD5算法的根本原理43. 3MD5的应用93需求分析及设计方案113.1主要功能模块11数据加密11数据存储11数据库设计114. 2主要流程图114MD5算法的DLL封装115. 1加载时动态链接126. 2运行时动态链接124. 3DLL封装情况125具体设计流程及实现135. 1读取的设计和实现135. 2插入的设计和实现135. 3修改的设计和实现137. 4删除的设
9、计和实现136调试与分析148. 1概述149. 2测试分析报告14结论14参考文献141引言随着网络通信技术和Internet的联系日益增强,出现了一系列与网络平安相关的问题:如对主机的攻击,网络上传输的信息被截取、篡改、重发等,由此,它对网络应用的进一步推广构成了巨大威胁,因此密码体制就在这种背景下应运而生了。存储加密涉及大量文件、资料、新建等文档处理,需要高效,可靠的进行各种信息交换,同时对信息流转的整个过程需要有效的组织和监控。对数据的平安存储和平安传输具有较高的要求。数据加密技术不仅具有保证信息机密性的信息加密功能,而且具有数字签名、秘密分存、系统平安等性能。因而可以保障信息的机密性
10、完整性和准确性,防止信息被篡改、伪造和假冒。虽然目前已有很多加密技术应用于各个领域,但是存在加密强度、运算量大等缺陷,因而本文提出了一种新的加密机制一MD5加密。同时,在竞争日趋剧烈的今天,只有实行对数据加密的加强管理,建设性提高信息平安在网络中的地位,以至在竞争中求生存,以期更好地开展下去。1.1 研究现状MD5的全称是MeSSage-DigeStalgorithm5(信息一摘要算法),MD5是一种不可逆的算法,即对生成的密文求逆,对应着无穷多个逆。在90年代初由MrrLaboratoryforComputerScience(IT计算机科学实验室)和RSADataSecurityInc(R
11、SA数据平安公司)的RonaldL.Rivest开发出来,经MD2,MD3和MD4开展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(把一个任意长度的字节串变换成一定长的大整数)。不管是MD2,MD4还是MD5,它们都需要获得一个随机长度的信息,并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但是MD2的设计与MD4和MD5完全不同,是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。RiVeSt在1989年开发出MD2算法,在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数,然后,以一个16位的
12、检验和追加到信息末尾,并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud发现,如果忽略了检验和,那样就将产生MD2冲突。MD2算法的加密后结果是唯一的一-即没有重复。为了加强算法的平安性,RiVeSt在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod512=448o然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位迭代结构的区块,而且每个区块要通过三个不同步骤的处理。DenBoer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。Dobbe
13、rtin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果),毫无疑问,MD4就此被淘汰掉了。一年以后,即1991年,RiVeSt开发出技术上更为趋近成熟的MD5算法。它在MD4的根底上增加了“平安-带子”(Safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为平安。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息一摘要的大小和填充的必要条件与MD4完全相同。DenBoer和Bosselaers曾发现MD5算法中的假冲突(PSeUdO-ColI
14、iSions),但除此之外就没有其他被发现的加密后结果了。VanOorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-forcehashfunction),而且他们猜想一个被设计专门用来搜索MD5冲突的机器可以平均每24天就找到一个冲突,但单从1991年到2001年这10年间,竟没有出现替代MD5算法的新算法,我们可以看出这个瑕疵并没有太多的影响MD5的平安性。而所有这些都缺乏以成为MD5在实际应用中的问题,并且由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下,MD5可以算是比拟平安的了。1.2 选题意义随着网络技术的广泛应用,网络信息平安越来越引起
15、人们的重视。最初的计算机应用程序通常没有或很少有平安性,那是因为当时的系统是专属和封闭的,简单地说,计算机之间虽然也交换数据和信息,但形成的网络完全在组织控制之下。在那个时候,计算机之间通信的协议也是不公开的,因此,别人很难访问交换的信息。同时,因为当时信息平安并不是个重要问题,所以导致了很多人都忽略了数据的平安性,直到后来人们真正的认识和了解到数据的重要性。而选该毕业设计,主要是针对数据在存储的时候存在大量的平安问题,并且在现有MD5加密算法根底上,提出了一种数据存储加密策略。同时,针对md5算法而进行进一步的了解和研究。1.3 选题背景现阶段,信息平安性已成为全社会共同关心问题,密码学研究
16、也越来越被人们所关注。密码学主要研究的是通讯保密。近年来,密码学研究之所以十分活泼,主要原因是它与计算机科学的蓬勃开展息息相关。由于公共和私人部门的一些机构越来越多的应用电子数据处理,将数据存储在数据库中,因此防止非法泄露,删除,修改等是必须重视的问题。对数据进行加密能够防止他人盗取需要保密的信息,但这只是解决了一方面的问题,至于如何防止他人对重要数据进行破坏,如何确定交易者的身份,以及如何防止日后发生纠纷时交易者抵赖,还需要采取其它的手段,这一手段就是数字签名。数字签名技术实际上是在数据加密技术根底上的一种延伸应用。数字签名经常和单向散列(HaSh)函数一起使用,而单向散列(HaSh)函数是
17、现代密码学的核心。最常见的散列算法有MD5,SHA和Snefru,MD5是当今非常流行的优秀的典型Hash加密技术。本毕业设计主要是对MD5算法进行研究,并在此根底上编程实现MD5算法函数,并实现封装;开发一个简单的数据存储程序验证算法的正确性和可用性。2相关理论根底2.1 单向散列函数单向散列函数也称HaSh(哈希)函数。它是现代密码学的核心。散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算出它的散列值,但要使它的散列值等于一个特殊值却很难。散列函数是公开的,对处理过
18、程并不保密,单向散列函数的平安性是它的单向性,其输出不依赖于输入。平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。一个散列值,要找到预映射的值,使它的值等于的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那么,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那么可以肯定他持有那份文件。2.1.1 单向散列函数的根本原理单向散列函数H(M)是对一个任意长度的消息M进行运算。返回一个固定长度的值h。h=H(M)其中h的长度为m。输入为任意长度且输出为固定长度的函数有
19、很多种,但意向散列函数具有使其单向的如下特性:1)给定值M,可以很方便地计算出h值。2)给定h,根据H(M)=h计算M很难。3)给定M,要找到另一那么消息M,并使得H(m)=H(m)很难。也就是说,如果某个入侵者想要获得一那么消息,他必须破坏掉每个运用单向函数的协议的平安性,因为单向性函数的关键在于产生M的一个唯一的消息摘要。事实上,单向散列函数是建立在压缩函数的思想根底之上的。单向散列函数的输出值为一个长度为n的散列值,该长度比输入值的长度In要小很多,即nH,函数go同时该散列值又将作为下一步运算的输入值之一,由此推算可知,整个消息的散列值n即为最后一个消息片段经计算所得的散列值。这样,我
20、们最终得到的将是一个固定长度的函数值。2.1.2 散列值的长度我们都知道,散列值越长那么平安性越好,MD5算法就是单向散列函数产生128位的散列值,以此保证了它的平安性,以下即为生成一个长散列值的方法:1)运用单向散列函数生成一那么消息的散列值。2)将该散列值附于消息之后。3)产生包含散列值和消息在内的一连串的数值的散列值。4)将第一步产生的散列值与第三步产生的散列值组合起来生成一个更大的散列值。5)重复1)至3)步假设干次。2.2 MD5算法的根本原理MD5算法以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由4个32位分组组成,将它们级联形成一个128位散列值。
21、第1步:填充MD5的第1步是在原消息中增加填充位,目的是使原消息长度等于一个值,即比512的倍数少64位。例如,如果原消息长度为100O位,那么要填充472位,使消息长度为1472位,因为64+1472=1536,是512的倍数(1536=512*3)。这样,填充后,原消息的长度为448位(比512少64),960位(比1024少64位),1472位(比1536少64位),等等。图2填充过程填充对用一个1位和多个0位进行填充。如果消息长度已经是448,那么要填充512位,使长度变成960位。因此,填充长度为1512的值。图2显示了填充过程。第2步:添加长度增加填充位后,下一步要计算机消息原长,
22、将其加进填充后的消息末尾。先计算消息长度,不包括填充位(即增加填充位前的长度)。例如,如果原消息为100O位,那么填充472位,使其变成比512的倍数(1536)少64位,但长度为1000,而不是1472o这个消息原长表示为64位值,添加到加进填充后的消息末尾,如图3所示。如果消息长度超过2*位(即64位无法表示,因为消息太长),那么只用长度的低64位,即等于计算lengthmod24o我们看到,这时消息长度为512的倍数,成为要散列的消息。图3添加长度第3步:将输入分成512位的块下面要将输入分成512位的块,如图4所示。图4将输入分成512块第4步:初始化链接变量第4步要初始化四个链接变量
23、分别称为A,B,C,D,它们都是32位的数字,这些链接变量的初始十六进制值如表1所示,低的字节在前面。表1链接变量注意低位的字节在前面指的是LittleBndian平台上内存中字节的排列方式,而在程序中书写时,要写成:A=0x01234567B=0x89abcdefC=0xfedcba98D=0x76543210第5步:处理块初始化之后,就要开始实际算法了。这是个循环,对消息中的多个512位块运行。5.1步:将四个链接变量复制到四个变量a,b,c,d中,使a=A,b=B,c=Cfd=D,如图5所示,图5将四个链接变量复制到四个变量中实际上,这个算法将a,b,c,Cl组合成128位存放器(ab
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅析 MD5 算法 原理 应用
