VC++ MD5算法的研究与实现-数据存储加密_第1页
VC++ MD5算法的研究与实现-数据存储加密_第2页
VC++ MD5算法的研究与实现-数据存储加密_第3页
VC++ MD5算法的研究与实现-数据存储加密_第4页
VC++ MD5算法的研究与实现-数据存储加密_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号:TP301.6 U D C:D10621-408-(2007)6215-0密 级:公 开 编 号:2003212047成 都 信 息 工 程 学 院学 位 论 文MD5 算法的研究与实现-数据存储加密论文作者姓名: 罗 丹申请学位专业: 计算机科学与技术申请学位类别: 工科学士指 导 教 师 姓 名 (职 称 ): 李贵洋 (讲师)论文提交日期: 2007 年 6 月 1 日MD5 算法的研究与实现-数据存储加密摘 要随着网络技术的广泛应用,网络信息安全越来越引起人们的重视。针对数据在存储的时候存在大量的安全问题,目前通常将需要存储的数据进行加密然后再存储,应用 MD5 算法是一个不错的选择。MD5 算法的全称是 Message-Digest algorithm 5,是一种用于产生数字签名的单项散列算法。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式,即将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit 的串。 该毕业设计是运用 microsoft visual c+ 6.0 软件而开发的,主要是通过算法实现数据的加密存储。文章分成五部分。第一,二部分描述了 MD5 的目前现状和相关理论知识,也让我们了解 MD5 的定义。重点是 MD5 的流程实现和封装 DLL。在 MD5 算法的 DLL 封装这章,主要是描述我们为什么要选用封装 DLL的原因,以及封装的好处。设计流程这一部分里包含读取,修改,插入,删除这几个功能的实现情况,并用流程图的方式来分别描述了这四大功能模块的实现过程。最后一部分显示了系统测试的内容和系统主要功能运行界面图。关键词:信息安全;MD5;加密;封装 The Research and Implementation for MD5 Algorithm- Data Storage and EncryptionAbstractWith the wide application of the network technology, the information of the network safety causes peoples attention more and more. A large number of security questions appear while storing data, the data that usually store needing at present are encrypted then stored, it is a good choice to use MD5 algorithm. The full name of MD5 algorithm is Message-Digest algorithm 5, is that a kind of individual event used for producing figures and signed breaks up and arranges algorithms. Its function is to let large capacity information compress and become a kind of secret form before signing the private key with the digital signature software, vary byte bunch of a wanton length into a great integer of one 128bit through an irreversible one bunch of algorithms of varying of character . Used Microsoft Visual C+ 6.0 software and developed in this graduation project, is mainly to realize through the algorithm that the encryption of the data is stored. The article is divided into five parts. The first and second parts are describing the current situation and relevant theory knowledge at present of MD5, let us understand the definition of MD5. The focal point is the procedure of MD5 is realized and encapsulation to Dynamic Link Library. In this chapter of encapsulation MD5 class library to Dynamic Link Library, mainly describe why we will select encapsulation Dynamic Link Library for use , and the advantage of encapsulation . Design this of procedure and include reading in the part , revise , insert, delete the realization situations of these functions, and has described the realization course of this four major functions module respectively in way of the flow chart . The last part has shown that the content of system testing and main function of system operate the interface picture .Key words: information security; MD5; encrypt; Packaging目 录论文总页数:23 页1 引言 .11.1 研究现状 .11.2 选题意义 .21.3 选题背景 .22 相关理论基础 .32.1 单向散列函数 .32.1.1 单向散列函数的基本原理 .32.1.2 散列值的长度 .42.2 MD5 算法的基本原理 .42.3 MD5 的应用 .123 需求分析及设计方案 .143.1 主要功能模块 .143.1.1 数据加密 .143.1.2 数据存储 .143.1.3 数据库设计 .143.2 主要流程图 .154 MD5 算法的 DLL 封装 .154.1 加载时动态链接 .164.2 运行时动态链接 .164.3 DLL 封装情况 .165 具体设计流程及实现 .175.1 读取的设计和实现 .175.2 插入的设计和实现 .185.3 修改的设计和实现 .185.4 删除的设计和实现 .196 调试与分析 .196.1 概述 .196.2 测试分析报告 .20结 论 .20参考文献 .21致 谢 .22声 明 .23第 1 页 共 23 页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 向大家演示了如何利用一部普通的个人电脑在几第 2 页 共 23 页分钟内找到 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 选题背景现阶段,信息安全性已成为全社会共同关心问题,密码学研究也越来越被人们所关注。密码学主要研究的是通讯保密。近年来,密码学研究之所以十分活跃,主要原因是它与计算机科学的蓬勃发展息息相关。由于公共和私人部门的一些机构越来越多的应用电子数据处理,将数据存储在数据库中,因此防止非法泄露,删除,修改等是必须重视的问题。对数据进行加密能够防止他人盗取需要保密的信息,但这只是解决了一方面的问题,至于如何防止他人对重要数据进行破坏,如何确定交易者的身份,以及如何防止日后发生纠纷时交易者第 3 页 共 23 页抵赖,还需要采取其它的手段,这一手段就是数字签名。数字签名技术实际上是在数据加密技术基础上的一种延伸应用。数字签名经常和单向散列(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)很难。第 4 页 共 23 页也就是说,如果某个入侵者想要获得一则消息,他必须破坏掉每个运用单向函数的协议的安全性,因为单向性函数的关键在于产生 M 的一个唯一的消息摘要。事实上,单向散列函数是建立在压缩函数的思想基础之上的。单向散列函数的输出值为一个长度为 n 的散列值,该长度比输入值的长度 m 要小很多,即nm。进行该函数运算的前提条件是我们应根据一定规则将消息分成若干个消息片段,散列函数的输入值是一个消息片段和前一个消息片段的输出值,而其输出值则是该消息片段前所有消息片段的散列值。这也就是说,消息片段 M 的散列值的计算方法可表示为:该过程可图示如下:Mi hiHi-1图 1同时该散列值又将作为下一步运算的输入值之一,由此推算可知,整个消息的散列值 n 即为最后一个消息片段经计算所得的散列值。这样,我们最终得到的将是一个固定长度的函数值。2.1.2 散列值的长度我们都知道,散列值越长则安全性越好,MD5 算法就是单向散列函数产生128 位的散列值,以此保证了它的安全性,以下即为生成一个长散列值的方法:1)运用单向散列函数生成一则消息的散列值。2)将该散列值附于消息之后。3)产生包含散列值和消息在内的一连串的数值的散列值。4)将第一步产生的散列值与第三步产生的散列值组合起来生成一个更大的散列值。5)重复 1)至 3)步若干次。2.2 MD5 算法的基本原理MD5 算法以 512 位分组来处理输入文本,每一分组又划分为 16 个 32 位子分组。算法的输出由 4 个 32 位分组组成,将它们级联形成一个 128 位散列值 5。单向散列函数第 5 页 共 23 页第 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 位。因此,填充长度为 1512 的值。图 2 显示了填充过程。第 2 步:添加长度增加填充位后,下一步要计算机消息原长,将其加进填充后的消息末尾。先计算消息长度,不包括填充位(即增加填充位前的长度)。例如,如果原消息为 1000 位,则填充 472 位,使其变成比 512 的倍数(1536)少 64 位,但长度为1000,而不是 1472。这个消息原长表示为 64 位值,添加到加进填充后的消息末尾,如图 3 所示。如果消息长度超过 264位(即 64 位无法表示,因为消息太长),则只用长度的低64 位,即等于计算 length mod 264。我们看到,这时消息长度为 512 的倍数,成为要散列的消息。第 6 页 共 23 页图 3 添加长度第 3 步:将输入分成 512 位的块下面要将输入分成 512 位的块,如图 4 所示。图 4 将输入分成 512 块第 4 步:初始化链接变量第 4 步要初始化四个链接变量,分别称为 A,B,C,D,它们都是 32 位的数字,这些链接变量的初始十六进制值如表 1 所示,低的字节在前面。第 7 页 共 23 页表 1 链接变量注意低位的字节在前面指的是 Little Bndian 平台上内存中字节的排列方式,而在程序中书写时,要写成:A=0x01234567B=Ox89abcdefC=Oxfedcba98D=0x76543210第 5 步:处理块初始化之后,就要开始实际算法了。这是个循环,对消息中的多个 512 位块运行。5.1 步:将四个链接变量复制到四个变量 a,b,c,d 中,使a=A,b=B,c=C,d=D,如图 5 所示,图 5 将四个链接变量复制到四个变量中实际上,这个算法将 a,b,c,d 组合成 128 位寄存器(abcd),寄存器(abcd)在实际算法运算中保存中间结果和最终结果,如图 6 所示。图 6 链接变量抽象视图第 8 页 共 23 页5.2 步:将当前 512 位块分解为 16 个子块,每个子块为 32 位,如图 7 所示。图 7 将当前 512 块分解为 16 个子块5.3 步:主循环有四轮,每轮很相似。每一轮的操作,都要处理一个块中的 16 个子块。每一轮的输入如下:(a) 16 个子块;(b)变量 a,b,c,d;(c)常量 t,如图 8 所示。图 8 每一轮处理这四轮中的第 1 步进行不同处理,其他步骤是相同的。-每一轮有 16 个输入子块 M0,M1,M15,或表示为 Mi,其中 i 为 115。我们知道,每个子块为 32 位。-t 是个常量数组,包含 64 个元素,每个元素为 32 位。我们把数组 t 的元素表示为 t1,t2,t64,或 ti,其中 i 为 164。由于有四轮,因此每一轮用 64 个 t 值中的 16 个。下面总结这四轮的迭代。每一轮输出的中间和最终结果复制到寄存器 abcd中,注意,每一轮有 16 个寄存器。1)首先对 b, c, d 作一次非线性函数运算,这个运算在四轮中不同。2)变量 a 加进第 1 步的输出(即寄存器 abcd)。第 9 页 共 23 页3)消息子块 Mi加进第 2 步的输出(即寄存器 abcd)。4)常量 ti加进第 3 步输出(即寄存器 abcd)。5)第 4 步的输出(即寄存器 abcd)循环左移 s 位。6)变量 b 加进第 5 步输出(即寄存器 abcd)。7)第 6 步的输出成为下一步的新 abcd。图 9 和图 10 显示了 MD5 操作过程。图 9 MD5 主循环图 10 MD5 的一个执行过程以下是每次操作中用到的四个线性函数(每轮一个),简单的说,就是布尔运算。F(x,y,z) = (x&y)|(x)&z)G(x,y,z) = (x&z)|(y&(z)第 10 页 共 23 页H(x,y,z) = xyzI(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)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)第 11 页 共 23 页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,0x fffa3942)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,0xe6db99e5)HH(c,d,a,b,M15,16,0x1fa27cf8)HH(b,c,d,a,M2,23,0xc4ac5665)第四轮II(a,b,c,d,M0,6,0xf4292244)II(d,a,b,c,M7,10,0x432aff97)II(c,d,a,b,M14,15,0xab9423a7)第 12 页 共 23 页II(b,c,d,a,M5,21,0xfc93a039)II(a,b,c,d,M12,6,0x655b59c3)II(d,a,b,c,M3,10,0x8f0ccc92)II(c,d,a,b,M10,15,0xffeff47d)II(b,c,d,a,M1,21,0x85845dd1)II(a,b,c,d,M8,6,0x6fa87e4f)II(d,a,b,c,M15,10,0xfe2ce6e0)II(c,d,a,b,M6,15,0xa3014314)II(b,c,d,a,M13,21,0x4e0811a1)II(a,b,c,d,M4,6,0xf7537e82)II(d,a,b,c,M11,10,0xbd3ad235)II(c,d,a,b,M2,15,0x2ad7d2bb)II(b,c,d,a,M9,21,0xeb86d391)所有这些完成之后,将 A,B,C,D 分别加上 a,b,c,d,然后用下一分组数据继续运行算法,最后 MD5 算法产生 128 位的输出是 A,B,C 和 D 的级联,其中低字节始于 A,高字节终于 D。至此整个 MD5 算法处理结束。2.3 MD5 的应用1) MD5 在电子商务领域内的应用在很多电子商务和社区应用中,管理用户的 Account 是一种最常用的基木功能,尽管很多 Application Server 提供了这些基本组件,但很多应用开发者为了管理的灵活性还是喜欢采用关系数据库来管理用户,懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中,因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言。2) MD5 在加密和解密技术上的应用MD5 还广泛用于加密和解密技术上。比如在 UNIX 系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成 MD5 值,然后再去和保存在文件系统中的 MD5 值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况小就可以确定用户登录系统的合法性,这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为“跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用 MD5 程序计算出这些字典第 13 页 共 23 页项的 MD5 值,然后再用目标的 MD5 值在这个字典中检索。我们假设密码的最大长度为 8 个字节,同时密码只能是字母和数字,共 26+26+10=62 个字符,排列组合出的字典的项数则是 P (62, 1) +P (62, 2) +.+p (62, 8),那也已经是一个天文数字了,存储这个字典就需要 TB 级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码 MD5 值的情况下才可以。这种加密技术被广泛的应用于 UNIX 系统中,这也是为什么 UNIX 系统比一般操作系统更为坚固一个重要原因。3) MD5 在注册信息中的应用MD5 算法的不可逆性在实际应用中产生什么作用呢。这里我举一个例子:我们到银行取钱输入密码时,一般是源码被存近了银行的主机,如果银行的内部人员或黑客侵入到数据库,很轻易地就窃取了你的源码。如果输入源码后,立即用 MD5 加密,把所得密文储存进系统。而以后用户每次仍是自己输源码,但我们只需比对 MD5 密文即可。系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。由于 MD5 不可逆,所以 MD5 密文无论被谁知道都无法窃得源码。现在大多数网站的数据库系统储存密码时都是使用 MD5 算法加密。4) MD5 在 PGP 中的应用PGP 是一个基于 RSA 公钥加密体系的邮件加密软件。可以用它对你的邮件保密以防止非授权者阅读,它还能对你的邮件加上数字签名从而使收信人可以确信邮件是你发来的。假设 A 要向 B 发一封信。PGP 用 MD5 来计算邮件文摘,A用自己的私钥将邮件文摘加密,附一加在邮件上,再用 B 的公钥将整个邮件加密。这样这份密文被 B 收到以后,B 用自己的私钥将邮件解密,得到 A 的原文和签名,B 的 PGP 也从原文计算出一个 128 位的文摘来,再用 A 的公钥解密签名得到的数比较,如果符合就说明这份邮件确实是 A 寄来的。这样两个要求都得到了满足。5) MD5 算法在保护文件系统完整性中的应用MD5 算法在文件系统完整性保护中的应用是利用它构造完整性检查程序,对文件系统的完整性进行分析和检查,监视文件系统的非授权或不期望的改变,检测和通知系统管理员改变的、增加的和删除的文件。我们从着重考虑承担关键任务的 UNIX 主机上文件系统完整性保护的角度出发,利用 MD5 报文摘要算法设计并实现了一个类 Tripwire 的文件系统完整性检查程序 MAFFIC (MD5 Algorithm For File Integrity Checker)。其基木原理是,文件系统完整性检查程序(MAFFIC)采用的技术核心就是对每个要监控的文件利用 MD5 算法产生一个数字指纹并保留下来,如果文件的数字指纹与保留的数字指纹不一致,那么第 14 页 共 23 页这个文件必定被改动过了,当 MAFFIC 运行在数据库生成模式时,根据管理员设置的一个配置文件对指定要监控的文件进行读取,对每个文件结合 MD5 加密手段生成相应数字指纹,并将这些结果保存在自己的数据库中,当怀疑系统被入侵时,由 MAFFIC 根据先前生成的数据库文件来做一次数字指纹的对照,如果文件被替换,则与 MAFFIC 数据库内相应数字指纹不匹配,这时它报告相应的文件被更改,管理员就明白系统遭受了入侵。6) MD5 在数据库中的应用网站往往将用户的账号,密码等信息使用非加密的方式存到数据库,账号使用类为 VarChar 的 UserCount 字段,同样,密码也是采用 VarChar 的password 字段,但如果采用加密方式存储密码信息,就必须改变密码字段password 的类型为了 6 位二进制方式,但 MD5 是单次加密算法,加密以后的信息不可以解密,所以如果用户丢失密码,任何人很难找到用户原来的密码。这时,网站失去了很重要的功能,就是获取已忘记的密码的功能。另外采用这样的加密方式,必须完全修改以前的用户资料,要求用户完全重新注册。此外,MD5 还应用于 802.1 认证中,PAP-MD5 认证采用 MD5 算法,用户密码不以明文方式在网上传输,从而保证了认证信息的安全。另外,大家比较熟悉的即时通信软件 MyIM 也使用 MD5 算法。利用 MD5 算法来进行文件校验的方案,被大量应用在软件下载站点、论坛数据库和系统文件安全等方面。3 需求分析及设计方案设计中要求实现部分功能:MD5 算法函数库;数据加密;数据存储等,最后将加密后的数据存放在 ACCESS 数据库中。3.1 主要功能模块3.1.1 数据加密主要是通过MD5算法的调用,对用户密码进行加密,使得加密前和加密后的密码都一起显示出来。3.1.2 数据存储主要是将加密前和加密以后的数据存入到ACCESS数据库中 5。3.1.3 数据库设计表2 字段值设置第 15 页 共 23 页3.2 主要流程图开始结束输入用户名和密码M D 5 加密将加密的数据存入A C C E S S图11 主功能流程图4 MD5算法的DLL封装DLL是Dynamic Link Library的缩写,翻译为动态链接库,是Windows采用的一种极其重要的技术。DLL本身采用内存共享机制。动态链接库是一些过程和函数及资源(包括:Bitmap、Icon等)的集合,是一种二进制文件,它能够同时被若干个应用程序或其他DLL所调用。当某个DLL被调用的时候,Win32系统便在内存中建一个相应的副本及一个计数器,如有多个应用程序同时调用这个DLL时,变化的只是计数器的值,并不增加系统开销,当计数器为0的时候,系统便释放这个DLL所占用的资源。一个独立的DLL程序本身即为可执行程序,但它一般不能单独执行,它和普通可执行程序的区别就在于它并不主动获取CPU(中央第 16 页 共 23 页处理器的简称)服务,通常是被其他真正的可执行程序或DLL所调用。4.1 加载时动态链接在加载时动态链接中,应用程序像调用本地函数一样对导出的 DLL 函数进行显式调用。要使用加载时动态链接,请在编译和链接应用程序时提供头文件(.h)和导入库文件(.lib)。当您这样做时,链接器将向系统提供加载 DLL 所需的信息,并在加载时解析导出的 DLL 函数的位置。 4.2 运行时动态链接在运行时动态链接中,应用程序调用LoadLibrary 函数或LoadLibraryEx 函数以在运行时加载DLL。成功加载DLL后,可以使用GetProcAddress 函数获得要调用的导出的DLL函数的地址。在使用运行时动态链接时,无需使用导入库文件。4.3 DLL封装情况主要是把定义申明导出为DLL,所以DLL的生成代码如下:同时需要注意的是,在调用的时候要记得把先前生成的MD5.dll及MD5.lib拷到源程序目录下,这样才能够保证运行正确不出错。特别注意是:MD5_CTX是MD5.DLL里定义的类,然后要用这个类生成自已的对象。也就是说它主要就是把类实例化,然后产生了对象后再调用了对象,然后就可以实现MD5加密了。#ifdef USING_IMPORT#define DLL_EXPORT _declspec(dllimport) #else#define DLL_EXPORT _declspec(dllexport) #endif#ifndef _LGY_MD5_H#define _LGY_MD5_H/* MD5 Class. */class DLL_EXPORT MD5_CTX public:MD5_CTX();virtual MD5_CTX();void MD5Update ( unsigned char *input, unsigned int inputLen);void MD5Final (unsigned char digest16);private:unsigned long int state4;第 17 页 共 23 页unsigned long int count2;unsigned char buffer64;unsigned char PADDING64;private:void MD5Init ();void MD5Transform (unsigned long int state4, unsigned char block64);void MD5_memcpy (unsigned char* output, unsigned char* input,unsigned int len);void Encode (unsigned char *output, unsigned long int *input,unsigned int len);void Decode (unsigned long int *output, unsigned char *input, unsigned int len);void MD5_memset (unsigned char* output,int value,unsigned int len);#endif下面为部分调用代码 6:MD5_CTX md5T;unsigned char digest16;md5T.MD5Update (unsigned char*)pBuf,iTotal);md5T.MD5Final(digest);5 具体设计流程及实现5.1 读取的设计和实现 主要是在界面里显示数据库 7的内容,并把密码加密 8,显示加密后的密码。主要流

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论