MD5算法的研究与实现-数据存储加密.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MD5算法的研究与实现-数据存储加密
1 引言随着网络通信技术和Internet的联系日益增强,出现了一系列与网络安全相关的问题:如对主机的攻击,网络上传输的信息被截取、篡改、重发等,由此,它对网络应用的进一步推广构成了巨大威胁,因此密码体制[1]就在这种背景下应运而生了。存储加密涉及大量文件、资料、新建等文档处理,需要高效,可靠的进行各种信息交换,同时对信息流转的整个过程需要有效的组织和监控。对数据的安全存储和安全传输具有较高的要求。数据加密技术不仅具有保证信息机密性的信息加密功能,而且具有数字签名、秘密分存、系统安全等性能。因而可以保障信息的机密性、完整性和准确性,防止信息被篡改、伪造和假冒[2]。虽然目前已有很多加密技术应用于各个领域,但是存在加密强度、运算量大等缺陷,因而本文提出了一种新的加密机制—MD5加密。同时,在竞争日趋激烈的今天,只有实行对数据加密的加强管理,建设性提高信息安全在网络中的地位,以至在竞争中求生存,以期更好地发展下去。 1.1 研究现状 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算法的加密后结果是唯一的---即没有重复。为了加强算法的安全性,Rivest在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512=448。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位迭代结构的区块,而且每个区块要通过三个不同步骤的处理。Den Boer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果),毫无疑问,MD4就此被淘汰掉了。一年以后,即1991年,Rivest开发出技术上更为趋近成熟的MD5算法。它在MD4的基础上增加了“安全-带子”(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息--摘要的大小和填充的必要条件与MD4完全相同。Den Boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。Van Oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索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(哈希)函数。它是现代密码学的核心。散列函数一直在计算机科学中使用,散列函数就是把可变的输入长度串转换成固定长度输出值(叫做散列值)的一种函数。而单向散列函数是在一个方向上工作的散列函数,从预映射的值很容易计算出它的散列值,但要使它的散列值等于一个特殊值却很难。散列函数是公开的,对处理过程并不保密,单向散列函数的安全性是它的单向性,其输出不依赖于输入。平均而言,预映射值的单个位的改变,将引起散列值中一半位的改变。已知一个散列值,要找到预映射的值,使它的值等于已知的散列值在计算上是不可行的,可把单向散列函数看作是构成指纹文件的一种方法。如果你验证某人持有一个特定的文件(你同时也持有该文件),但你不想他将文件传给你,那么,就要通知他将该文件的散列值传给你,如果他传送的散列值是正确的,那么可以肯定他持有那份文件。目录论文总页数:23页 1 引言 1 1.1 研究现状 1 1.2 选题意义 2 1.3 选题背景 2 2 相关理论基础 3 2.1 单向散列函数 3 2.1.1 单向散列函数的基本原理 3 2.1.2 散列值的长度 4 2.2 MD5算法的基本原理 4
2.3 MD5的应用12 3 需求分析及设计方案14
3.1 主要功能模块14
3.1.1 数据加密14 3.1.2 数据存储14 3.1.3 数据库设计14 3.2 主要流程图15 4 MD5算法的DLL封装15
4.1 加载时动态链接16