MD5改进算法及应用研究

合集下载

MD5加密算法的原理及应用

MD5加密算法的原理及应用

MD5加密算法的原理及应用MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于将任意长度的数据加密成固定长度的(通常为128位)哈希值。

它由美国密码学家罗纳德·李维斯特(Ronald Rivest)于1992年提出,被广泛应用于网络安全、数据完整性检查和密码保护等领域。

通过对MD5算法的原理和应用进行理解,可以更好地了解MD5算法的特点和局限性。

一、原理:MD5算法的核心原理可以概括为以下几个步骤:1.填充数据:首先,需要对原数据进行填充以满足一定的要求。

填充的规则是:向原数据的尾部添加一个1和若干个0,直到满足总长度模512(即以512位为一个分组)的余数为4482.添加长度:在填充数据后,需要将原数据的长度以64位的二进制形式添加到填充后的数据尾部,这样可以保证每个分组长度为512位。

3.初始化变量:MD5算法使用四个32位的寄存器A、B、C、D作为变量,用于迭代运算。

4.循环计算:将填充和添加长度后的数据进行分组,并进行循环的运算。

MD5算法根据数据的每个分组进行64次迭代计算,并且每次迭代都会更新四个变量的值。

5.输出结果:经过循环计算后,最后输出的四个变量值即为加密后的128位哈希值。

二、应用:MD5算法在网络安全和密码保护中有着广泛的应用,主要体现在以下几个方面:1.数据完整性验证:MD5算法可以用于验证数据的完整性和防篡改性。

发送方可以通过对数据进行MD5加密后,将哈希值同数据一起发送给接收方。

接收方在接收到数据后,也对数据进行MD5加密,并将得到的哈希值与发送方发送的哈希值进行对比,如果一致,则说明数据在传输过程中没有受到篡改。

2.密码保护:MD5算法可以用于密码的存储与验证,通常将用户密码加密后存储在数据库中。

当用户登录时,系统会将用户输入的密码进行加密后与数据库中存储的密码进行比对,如果一致,则认为用户输入的密码正确。

3.数字证书验证:MD5算法可用于数字证书的验证和签名过程中。

毕业设计-md5算法的研究与实现数据存储加密—论文[管理资料]

毕业设计-md5算法的研究与实现数据存储加密—论文[管理资料]

毕业设计(论文)MD5算法的研究与实现------数据存储加密论文作者姓名:申请学位专业:申请学位类别:指导教师姓名(职称):论文提交日期:MD5算法的研究与实现------数据存储加密摘要随着网络技术的广泛应用,网络信息安全越来越引起人们的重视。

针对数据在存储的时候存在大量的安全问题,目前通常将需要存储的数据进行加密然后再存储,应用MD5算法是一个不错的选择。

MD5算法的全称是Message-Digest algorithm 5,是一种用于产生数字签名的单项散列算法。

它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式,即将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的串。

该毕业设计是运用microsoft visual c++ ,主要是通过算法实现数据的加密存储。

文章分成五部分。

第一,二部分描述了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 people's 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++ 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 引言 (1)研究现状 (1)选题意义 (2)选题背景 (2)2 相关理论基础 (3)单向散列函数 (3)单向散列函数的基本原理 (3)散列值的长度 (4)MD5算法的基本原理 (4)MD5的应用 (12)3 需求分析及设计方案 (14)主要功能模块 (14)数据加密 (14)数据存储 (14)数据库设计 (14)主要流程图 (15)4 MD5算法的DLL封装 (15)加载时动态链接 (16)运行时动态链接 (16)DLL封装情况 (16)5 具体设计流程及实现 (17)读取的设计和实现 (17)插入的设计和实现 (18)修改的设计和实现 (18)删除的设计和实现 (19)6 调试与分析 (19)概述 (19)测试分析报告 (20)结论 (20)参考文献 (21)致谢 (22)声明 (23)1引言随着网络通信技术和Internet的联系日益增强,出现了一系列与网络安全相关的问题:如对主机的攻击,网络上传输的信息被截取、篡改、重发等,由此,它对网络应用的进一步推广构成了巨大威胁,因此密码体制[1]就在这种背景下应运而生了。

MD5加密算法的改进及应用

MD5加密算法的改进及应用

MD5加密算法的改进及应用作者:郑晓松褚丽莉张天乐来源:《数字技术与应用》2012年第08期摘要:本文介绍了MD5加密算法的基本原理,并且在此基础对该算法进行了改进。

最后将MD5加密算法应用于数据库存储密码等重要信息的加密处理。

关键词:MD5 C# 随机数按位与运算中图分类号:TP309.7 文献标识码:A 文章编号:1007-9416(2012)08-0099-011、概述MD5是Message-Diggest Algorithm 5(信息-摘要算法)的英文缩写,该算法的输入文本处理是通过将MD5分为512位分组,且16个32位的子分组组成了每个分组。

4个32位的数分组组成了该算法的输出部分,然后把这4组32位的数级联成为1个128位的hash散列值。

第一步,用一个小于512位的倍数64位的数来补充消息长度。

把1加在改消息的后面,其后面在加上所需个数的0,再把补充位数前的长度为64位的消息加到其后面。

上面的步骤可以使得512位的整数倍正好是该消息的长度,而且又可以满足不同消息补位后的结果是不同的。

四个32位变量初始化为:A=0M01234567B=0M89abcdefC=0Mfedcba98D=0M76543210第二步,在算法主循环运行时,消息的512位分组个数作为主循环循环次数。

将上面四个变量复制到另外的变量中:A到a,B到b,C到c,D到d。

第一轮进行16次操作。

每次操作对a,b,c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。

再将所得结果向右环移一个不定的数,并加上a,b,c或d中之一。

最后用该结果取代a,b,c或d中之一。

以一下是每次操作中用到的四个非线性函数(每轮一个)。

F(M,N,P)=( M &N)|((~ M)&P)G(M,N,P)=(M&P)|(N&(~P))H(M,N,P)=M^N^PI(M,N,P)=N^(M|(~P))(&是与,|是或,~是非,^是异或)函数F是按逐位方式操作:如果M,那么N,否则P。

MD5加密算法探究及其应用

MD5加密算法探究及其应用

MD5加密算法探究及其应用引言MD5加密算法作为一种免费的加密算法,广泛地应用于计算机,数据安全传输,数字签名认证等安全领域.MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),是由Ron Rivest (RSA 算法的发明人之一,于2002年获得图灵奖)于90年代初提出,经MD2,MD3和MD4发展而来的.Rivest 最早于1989年提出了MD2算法针对8位计算机做了优化,为了提高算法的安全性与稳定性,Rivest在1990年又开发出MD4算法,但人们很快发现了MD4算法的漏洞.随后在1991年,Rivest开发出来技术上更加稳定安全更趋于成熟的MD5算法.1993年,美国国家标准和技术协会(NIST)提出了安全散列算法(SHA).1995年又发布了一个修订版,即SHA-1.SHA-1与MD5均由MD4导出,所以彼此很相似.相应的,它们的强度和其他特征也是相似的.2004年8月17日于美国加州圣巴巴拉召开的国际密码学会议(Crypto 2004)上,来自山东大学的王小云教授做了破译MD5,HAV AL-128,MD4和RIPEMD算法的报告,宣告了MD系列算法的破解.对于一个进行身份认证的摘要算法来说,MD5已经是不安全了,但是很多实际的应用领域MD5还有它的使用价值的,所以我们分析探究它的加密原理,我们在此基础上对它的加密进行改进利用,对于我们今后的加密安全工作还是很有帮助的.1.预备知识1.1 Hash函数Hash函数是一种将任意长度的信息压缩到某一固定长度的消息摘要的函数,又称Hash 算法.Hash函数必须满足一定的安全条件.这里主要介绍三个主要的方面:单向性,弱抗碰撞性,强碰撞性.单向性是指对Hash函数h而言,又x计算h(x)是容易的,但从h(x)计算x是不可行的.一个弱碰撞的Hash函数是满足下列条件的一个函数h:h的输入可以是任意长度的消息或文件ph的输出长度是固定的给定h和M,计算h(p)是很容易的给定h和一个随机选择的消息p1,找到另一个消息p2,p1 p2使得h(p1)=h(p2)计算上是不可行的.一个强碰撞的Hash 函数是满足下列条件的一个函数h : h 的输入 可以是任意长度的消息或文件p h 的输出长度是固定的给定h 和M ,计算h (p )是很容易的给定h ,找到两个不同的消息p1,p2 ,使得h (p1)=h (p2)在计算上是不可行的. (如果有两个不同的消息M 1,M 2,使得h (M 1)=h (M 2),我们就说这两个消息是碰撞的)1.2 16进制的相关知识十六进制在数学中是一种逢16进1的进位制,一般用数字0到9和字母A 到F 表示(A-F 表示10-15).十六进制转换成二进制的比特流(第一列16进制,第二列2进制)例如:十六进制为9FD ,那么在计算机中二进制表示100111111101(9=1001,F=1111,D=1101) 1.3 逻辑运算① 逻辑“与”运算,用“∧”表示 真值表表示为二进制按位逻辑“与”运算,即逐位进行逻辑“与”运算,并将逐位逻辑运算的结果进行组合得到的结果.例如①:如果01110001=x ,11001001=y ,那么01000001=∧y x 例如②:如果1667FD x =,1647AD y =,那么?=∧y x首先把1667FD x =转换为二进制为1111010110011111;其次把1647AD y =转换而二进制位1011010100011110; 最后按位进行逻辑“与”运算结果为1011010100011110 ② 逻辑“或”运算,用“|”表示 真值表表示为:③ 逻辑“异或”运算,用“⊕”表示真值表表示为:④ 逻辑“取反”运算二进制数的所有0改为,1改为0,这个过程叫“取反” 例如:如果1100011001=x ,那么0011100110=-x 1.4 模运算 基本概念给定一个正整数p ,任意一个整数n ,一定存在等式 r kp n += ;其中r k ,是整数,且 p r <≤0,称k 为n 除以p 的商,r 为n 除以p 的余数.对于正整数p 和整数b a ,,定义如下运算:模p 加法:p b a )%(+ ,其结果是b a +算术和除以p 的余数,也就是说,r kp b a +=+)(,则r p b a =+)%(例如:1647876aa d x =,1675678b c e y =,那么?=+y x (注这里“+”是模322加法运算)首先将1647876aa d x =转换为二进制为00010001111010101010101101011101; 其次将1675678b c e y =转换为二进制为 10011101010100011110111110100011 然后逐位相加结果为22111111121011212021021102121110因为实行的是二进制数据,逢2向前一位进1,所以最终结果为:111000000001100100110001111001110,这个结果的十进制是:323130212017141398763212222222222222227442450944++++++++++++++=,然后模322,结果为3224527822,它的二进制表示为:110000000011001001100011110011102. MD5加密算法的原理简单的说,MD5加密以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过一系列的处理后,算法的输出有4个32位分组组成,将这4个32位分组级联后将生成一个128位散列值. 第一步:消息的填充如果输入的消息的长度(以bit 位单位)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448,填充的方法是附加一个“1”在消息后面,再补充多个“0”,然后在其后附上64比特的消息长度(填充前)的二进制表示.这两步的作用是使最终填充后的消息恰好是512比特的整倍长,同时确保不同的消息在填充后不会相同. 第二步:记录消息长度用64位来存储填充前消息长度,这64位加在第一步结果的后面,这样消息长度就变为N*512+448+64=(N+1)*512(bits ). 第三步:加载初始标准数据算法中使用了四个32比特的变量A ,B ,C ,D ,先将这四个变量初始化为:01234567=A A B C D E F B 89= 98FEDCBA C = 76543210=D 称它们为链接变量,接着进行算法的主循环,循环的次数是消息中512比特的块的数目. 将上面四个标准变量复制到另外四个变量中:A 到a ,B 到b ,C 到c ,D 到d 第四步:四轮循环运算循环的次数是分组的个数(N+1),每轮循环都很相似,每次操作对abcd 中的其中三个作一次非线性函数运算,然后将所得的结果加上第四个变量,文本的一个子分组和一个常数,再将所得结果向左位移一个不定的数,并加上a ,b ,c ,d 中之一,最后用该结果取代a ,b ,c ,d 中之一.设XY 表示输入的块,下面描述一些运算: (1)y x ∧表示x 与y 按位逻辑“与”运算 (2)y x |表示与y 按位逻辑“或”运算(3)y x ⊕表示x 与y 按位逻辑“异或”运算 (4)-x 表示x 的按位逻辑取“反” (5)x +y 表示整数模322加法运算 (6)s x 表示将x 循环左移s 个单位 有四个非线性函数,每轮一个)(),,(),,()(|)(),,()(|)(),,(---∨⊕=⊕⊕=∧∧=∧∧=z x y z y x I zy x z y x H z y z x z y x G z x y x z y x F这四个函数的说明:如果x ,y ,z 的对应的位是独立和均匀的,那么结果的每一位也应该是均匀的.其中F 是一个逐位运算的函数,即,如果x ,那么y ,否则z .函数H 是逐位奇偶操作符.(其中“∧”是逻辑“与”运算,“|”是逻辑“或”运算,“⊕”逻辑“异或”运算,“-”逻辑“取反”运算) 四轮运算是:假设j M 表示消息的第j 个子分组(从0到15),s 表示循环左移s 位),,,,,,(i j t s M d c b a FF 表示))),,((((s t M d c b F a b a i j++++= ),,,,,,(i j t s M d c b a GG 表示))),,((((s t M d c b G a b a i j++++= ),,,,,,(i j t s M d c b a HH 表示))),,((((s t M d c b H a b a i j++++=),,,,,,(i j t s M d c b a II 表示))),,((((s t M d c b I a b a i j ++++=这四轮(64步)是: 第一轮⑴)47876,7,,,,,(0aa d M d c b a FF ⑵ )75678,12,,,,,(1b c e M c b a d FF⑶)24070,17,,,,,(2db M b a d c FF ⑷ )1,22,,,,,(3bdceee c M a d c b FF ⑸)057,7,,,,,(4faf c f M d c b a FF ⑹ )624787,12,,,,,(5a c M c b a d FF ⑺)8304613,17,,,,,(6a M b a d c FF ⑻ )469501,22,,,,,(7fd M a d c b FF ⑼)8698098,7,,,,,(8d M d c b a FF ⑽ )7448,12,,,,,(9af f b M c b a d FF ⑾)15,17,,,,,(10bb ffff M b a d c FF ⑿ )7895,22,,,,,(11be cd M a d c b FF ⒀)9011226,7,,,,,(12b M d c b a FF ⒁ )987193,12,,,,,(13fd M c b a d FF ⒂)679438,17,,,,,(14e a M b a d c FF ⒃ )4082149,22,,,,,(15b M a d c b FF 第二轮⑴)256261,5,,,,,(1e f M d c b a GG ⑵)340040,9,,,,,(6b c M c b a d GG ⑶)515265,14,,,,,(11a e M b a d c GG ⑷)769,20,,,,,(0aa c b e M a d c b GG ⑸)10562,5,,,,,(5d f d M d c b a GG ⑹)02441453,9,,,,,(10M c b a d GG ⑺)68118,14,,,,,(15e a d M b a d c GG ⑻)837,20,,,,,(4fbc d e M a d c b GG ⑼)6121,5,,,,,(9cde e M d c b a GG ⑽)633707,9,,,,,(14d c M c b a d GG ⑾)87504,14,,,,,(3d d f M b a d c GG ⑿)14455,20,,,,,(8ed a M a d c b GG ⒀)90539,5,13,,,,(e e a M d c b a GG ⒁)83,9,,,,,(2f fcefa M c b a d GG ⒂)902676,14,,,,,(7d f M b a d c GG ⒃)8428,20,,,,,(12a c a d M a d c b GG 第三轮⑴)3942,4,,,,,(5fffa M d c b a HH ⑵)6818771,11,,,,,(8f M c b a d HH ⑶)612296,16,,,,,(11d d M b a d c HH ⑷)5380,23,,,,,(14c fde M a d c b HH ⑸)444,4,,,,,,(1beea a M d c b a HH ⑹)94,11,,,,,(4bdecfa M c b a d HH ⑺)6046,16,,,,,(7b bb f M b a d c HH ⑻)70,23,,,,,(10bebfbc M a d c b HH ⑼)67289,4,,,,,(13ec b M d c b a HH ⑽)127,11,,,,,(10fa eaa M c b a d HH ⑾)30854,16,,,,,(3ef d M b a d c HH ⑿)0504881,23,,,,,(6d M a d c b HH⒀)03949,4,,,,,(9d d d M d c b a HH ⒁)5996,11,,,,,(12e db e M c b a d HH ⒂)8271,16,,,,,(15cf fa M b a d c HH ⒃)56654,23,,,,,(2ac c M a d c b HH 第四轮⑴)4292244,6,,,,,(0f M d c b a II ⑵)97432,10,,,,,(7aff M c b a d II ⑶)79423,15,,,,,(14a ab M b a d c II ⑷)03993,21,,,,,(5a fc M a d c b II ⑸)359655,6,,,,,(12c b M d c b a II ⑹)9208,10,,,,,(3ccc f M c b a d II ⑺ )47,15,,,,,(10d ffeff M b a d c II ⑻)185845,21,,,,,(1dd M a d c b II ⑼)4876,6,,,,,(8f e fa M d c b a II ⑽)062,10,,,,,(15e ce fe M c b a d II ⑾)3014314,15,,,,,(6a M b a d c II ⑿)108114,21,,,,,(13a e M a d c b II ⒀)827537,6,,,,,(4e f M d c b a II ⒁)2353,10,,,,,(11af bd M c b a d II ⒂)272,15,,,,,(2bb d ad M b a d c II ⒃)39186,21,,,,,(9d eb M a d c b II其中常数i t 可以如下选择:在第i 步中,i t 是))(sin(4294967296i abs *的整数部分,i 的单位是弧度.4294967296(等于2的32次方).所有这些完成之后,将A 、B 、C 、D 分别加上a 、b 、c 、d .然后用下一分组数据继续运行算法,最后的输出是A 、B 、C 和D 的级联. 3.运算原理简举例例如:计算)47876,7,,,,,(0aa d M d c b a FF解: 不妨假设:要加密的信息为abc ,其比特串为01100001 01100010 01100011它的长度是24位,于是添加1个“1”,423个“0”,再加上64比特串(24)16=00000000 0000001816即x=01100001 01100010 01100011 1 0…0 00000000 00000018,共512比特,只有16分组为1514131211109876543210,,,,,,,,,,,,,,,M M M M M M M M M M M M M M M M ,所以有011000010=M 011000101=M 011000102=M100000003=M1413121110987654M M M M M MM MMMM===========0000000015M =00000018首先计算出 A=1601234567=0000 0001 0010 0011 0100 0101 0110 0111=aB=1689ABCDEF =1000 1001 1010 1011 1100 1101 1110 1111=bC=1698FEDCBA =1111 1110 1101 1100 1011 1010 1001 1000=c D=1676543210=0111 0110 0101 0100 0011 0010 0001 0000=d其次计算)(|)(),,(d b c b d c b F ∧∧=-=(1000 1001 1010 1011 1100 1101 1110 1111∧1111 1110 1101 1100 1011 1010 1001 1000)|(0111 0110 0101 0100 0011 0010 0001 0000∧0111 0110 0101 0100 0011 0010 0001 0000)=(1000 1000 1000 1000 1000 1000 1000 1000)|(0111 0110 0101 0100 0011 0010 0001 0000)=1111 1110 1101 1100 1011 1010 1001 10001647876aa d 转换为二进制为1101 0111 0110 1010 1010 0100 0111 1000)47876,7,,,,,(0aa d M d c b a FF 结果为 )7)),,((((00t Md c b F a b a ++++==(1000 1001 1010 1011 1100 1101 1110 1111)+((0000 0001 0010 0011 0100 0101 0110 0111+1111 1110 1101 1100 1011 1010 1001 1000+0000 0001 0001 0000 0000 0000 0001 0000)+ 1101 0111 0110 1010 1010 0100 0111 1000)7 )=(1000 1001 1010 1011 1100 1101 1110 1111)+((0000 0000 0011 1000 0000 0000 0000 1111+1101 0111 0110 1010 1010 0100 0111 1000)7 )=(1000 1001 1010 1011 1100 1101 1110 1111)+(1101 0111 1010 0010 1010 0100 1000 01117 )=(1000 1001 1010 1011 1100 1101 1110 1111)+(0000 1111 1010 1111 0100 0101 0100 1001) =1001 1001 0101 1011 0001 0011 0011 1000=955b133816这样就计算出第一步的运算,下面的运算和上面的运算类同就不在这里浪费篇幅. 4.MD5加密算法的安全性分析关于加密算法的分析就重来没有停止过,现有的加密算法的密钥动辄就256,为强行破解提供了很大的障碍;随着计算机速度的提高,位数还在增减,对密码的分析就成为唯一的突破 口.由上面的MD5加密的原理,我们知道,其加密主要有三步: (1)对字符串的填充 (2)分段求摘要 (3)最终摘要的输出第一步和第三步都不是MD5算法的核心,也不是碰撞的可能发生地,所以下面的介绍还是分析和讨论都是基于第二步进行的 4.1各步的碰撞的分析)(),,(),,()(|)(),,()(|)(),,(---∨⊕=⊕⊕=∧∧=∧∧=z x y z y x I zy x z y x H z y z x z y x G z x y x z y x F不妨取(x ,y ,z )=(1,1,1),(1,1,0),(1,0,0) ,(1,0,1)(0,0,1),(0,1,1),(0,1,0),(0,0,0)经过分析就可以得到: 结论一:F=0,当且仅当(x ,y ,z )∈{(0,0,0),(0,1,0) ,(1,0,0), (1,0,1)} F=1, 当且仅当(x ,y ,z )∈{(1,1,1),(1,1,0),(0,0,1),(0,1,1)} 结论二:G=0,当且仅当(x ,y ,z )∈{(0,0,0),(0,0,1),(0,1,1),(1,0,0)} G=1,当且仅当(x ,y ,z )∈{(0,1,0), (1,0,1),(1,1,0), (1,1,1)} 结论三:H=0,当且仅当(x ,y ,z )∈{(0,0,0),(0,1,1),(1,0,1),(1,1,1)} H=1,当且仅当(x ,y ,z )∈{(0,0,1),(0,1,0), (1,0,0),(1,1,0)} 结论四:I=0,当且仅当(x ,y ,z )∈{(0,0,1),(0,1,0), (1,1,0),(1,1,1)} I=1,当且仅当(x ,y ,z )∈{(0,0,0),(0,1,1),(1,0,1),(1,0,0)从文献[7]可以知道,在使用相应的概率分析就会产生一定概率的碰撞 4.2各圈碰撞的分析从文献[7]可以知道,要产生对第一轮的碰撞,只需要在报文i M 中修改三位就可以了,设},,,{15,1,0,i i i i m m m M 中的最高位,或者相应的位就会出现一定概率的碰撞. 5.MD5加密技术的实际应用举例MD5加密技术广泛应用于数字签名领域,它的典型应用是对一段信息产生信息摘要,以防止被篡改.比如在发布软件的时候,经常会有一个文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:MD5:a5fdfeb0af54ef8397c4ea4a06e25d8f ,这就是该软件文件的数字签名,MD5将整个文件当做一个大文本信息,通过其不可逆的字符串变换算法,产生了这个MD5信息摘要.在以后传播这个文件的过程中,只要文件的内容发生任何形式的改变(包括人为的修改或者下载过程中线路不稳定引起的传输错误等,换句话说,哪怕源文件的一个字符被改变,MD5值也会发生改变),在对这个文件重新计算MD5值时就会发现信息摘要不相同,由此可以判定得到的文件是否被篡改.如果再配合一个第三方认证机构,利用MD5加密技术还可以防止文件作者的“抵赖”.MD5还广泛用于加密保密信息上.如对于数据库中登陆密码一般都是经过MD5加密后存放的.当登陆的时候,根据用户填报的密码生成相应的MD5值再与数据库中的信息对比,从而判定登陆的合法性,但实际中如果把用户的密码MD5处理后再存储到数据库中是不安全的.因为用户的密码往往是比较短的,而且很多用户的密码都是使用生日,身份证等比较熟悉的号码,常用的一些吉利的数字以方便记忆,如果把常用的密码先经过MD5处理形成MD5值集群,然后把要破译的MD5结果相匹配,就可能找到原文.因此,对于MD5加密保密信息时,一般需要同时设置一个随机附加值来保证密码的安全性.例如:某用户的注册密码为“move ”,则在将密码保存至数据库时应当先在密码原文后附加一个随机附加值,比如附加值为“8dx9087h ”,然后将带有附加值的密码经过MD5加密,即将“move8dx9087h ”做为原密码进行加密,然后存入数据库中,同时将随机附加码也存入数据库中.在检测用户登陆密码时,则将用户输入的密码与数据库中的附加码共同进行MD5加密后进行对比.这样可以有效地降低通过密文比对获得密码原码的可能性. 6.MD5加密算法的改进意见研究的实质是为了对现有的运用提供借鉴,对未来的应用提供前瞻性的认识.研究MD5算法就是为了怎样使得碰撞更难通过分析实现.以下是对Hash 算法的改进策略:(1)增加Hash运算的轮数.轮数越多,其计算空间越大,进行运算的计算量就会成百倍成千万倍的增加,这样在无形中就会增加密码破译的难度,这样密码的安全系数就会升高,达到预定的安全指数.(2)模运算和位运算是加密算法的主要计算过程.可以尝试使用新的理论去实现加密思想,而不单单是运用类同的模运算,可以使用数论,离散对数,椭圆曲线等知识,从根本上做到创新.(3)Hash算法的其他设计方法的研究.现在无论是SHA-1,HA VAL-128还是RIPEMD都在一定程度上仿照了MD5加密算法,无论是从消息的填充还是从核心的模运算,位运算都有惊人的相似之处,所以研究新的加密算法已经迫在眉睫,理论创新才是真正的出路.7. 附录VB6.0中实现MD5改进后的加密算法Private Const BITS_TO_A_BYTE = 8Private Const BYTES_TO_A_WORD = 4Private Const BITS_TO_A_WORD = 32Private m_lOnBits(30)Private m_l2Power(30)Private Function LShift(lV alue, iShiftBits) ’定义左移函数If iShiftBits = 0 ThenLShift = lV alueExit FunctionElseIf iShiftBits = 31 ThenIf lV alue And 1 ThenLShift = &H80000000ElseLShift = 0End IfExit FunctionElseIf iShiftBits < 0 Or iShiftBits > 31 ThenErr.Raise 6If (lV alue And m_l2Power(31 - iShiftBits)) ThenLShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000ElseLShift = ((lV alue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))End IfEnd FunctionPrivate Function RShift(lValue, iShiftBits) ’定义右移函数If iShiftBits = 0 ThenRShift = lV alueExit FunctionElseIf iShiftBits = 31 ThenIf lV alue And &H80000000 ThenRShift = 1ElseRShift = 0End IfExit FunctionElseIf iShiftBits < 0 Or iShiftBits > 31 ThenErr.Raise 6End IfRShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)If (lV alue And &H80000000) ThenRShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))End IfEnd FunctionPrivate Function RotateLeft(lV alue, iShiftBits) ’定义循环左移函数End FunctionPrivate Function AddUnsigned(lX, lY) ’定义模322加法运算Dim lX4Dim lY4Dim lX8Dim lY8Dim lResultlX8 = lX And &H80000000lY8 = lY And &H80000000lX4 = lX And &H40000000lY4 = lY And &H40000000lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)If lX4 And lY4 ThenlResult = lResult Xor &H80000000 Xor lX8 Xor lY8ElseIf lX4 Or lY4 ThenIf lResult And &H40000000 ThenlResult = lResult Xor &HC0000000 Xor lX8 Xor lY8ElselResult = lResult Xor &H40000000 Xor lX8 Xor lY8End IfElselResult = lResult Xor lX8 Xor lY8End IfAddUnsigned = lResultEnd FunctionPrivate Function md5_F(x, y, z)md5_F = (x And y) Or ((Not x) And z)End FunctionPrivate Function md5_G(x, y, z)md5_G = (x And z) Or (y And (Not z))End FunctionPrivate Function md5_H(x, y, z)md5_H = (x Xor y Xor z)End FunctionPrivate Function md5_I(x, y, z)md5_I = (y Xor (x Or (Not z)))End FunctionPrivate Sub md5_FF(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Sub md5_GG(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Sub md5_HH(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Sub md5_II(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End SubPrivate Function ConvertToWordArray(sMessage)Dim lMessageLengthDim lWordArray()Dim lBytePositionDim lByteCountDim lWordCountConst MODULUS_BITS = 512Const CONGRUENT_BITS = 448lMessageLength = Len(sMessage)lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)ReDim lWordArray(lNumberOfWords - 1)lBytePosition = 0lByteCount = 0Do Until lByteCount >= lMessageLengthlWordCount = lByteCount \ BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTElWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)lByteCount = lByteCount + 1LooplWordCount = lByteCount \ BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTElWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)ConvertToWordArray = lWordArrayEnd FunctionPrivate Function WordToHex(lV alue)Dim lByteFor lCount = 0 To 3lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)WordToHex = WordToHex & Right("0" & Hex(lByte), 2)NextEnd FunctionPublic Function MD5(sMessage)m_lOnBits(0) = CLng(1)m_lOnBits(1) = CLng(3)m_lOnBits(2) = CLng(7)m_lOnBits(3) = CLng(15)m_lOnBits(4) = CLng(31)m_lOnBits(5) = CLng(63)m_lOnBits(6) = CLng(127)m_lOnBits(7) = CLng(255)m_lOnBits(8) = CLng(511)m_lOnBits(9) = CLng(1023)m_lOnBits(10) = CLng(2047)m_lOnBits(11) = CLng(4095)m_lOnBits(12) = CLng(8191)m_lOnBits(13) = CLng(16383)m_lOnBits(14) = CLng(32767)m_lOnBits(15) = CLng(65535)m_lOnBits(16) = CLng(131071)m_lOnBits(17) = CLng(262143)m_lOnBits(18) = CLng(524287)m_lOnBits(19) = CLng(1048575)m_lOnBits(20) = CLng(2097151)m_lOnBits(21) = CLng(4194303)m_lOnBits(22) = CLng(8388607)m_lOnBits(25) = CLng(67108863) m_lOnBits(26) = CLng(134217727) m_lOnBits(27) = CLng(268435455) m_lOnBits(28) = CLng(536870911) m_lOnBits(29) = CLng(1073741823) m_lOnBits(30) = CLng(2147483647) m_l2Power(0) = CLng(1)m_l2Power(1) = CLng(2)m_l2Power(2) = CLng(4)m_l2Power(3) = CLng(8)m_l2Power(4) = CLng(16)m_l2Power(5) = CLng(32)m_l2Power(6) = CLng(64)m_l2Power(7) = CLng(128)m_l2Power(8) = CLng(256)m_l2Power(9) = CLng(512)m_l2Power(10) = CLng(1024)m_l2Power(11) = CLng(2048)m_l2Power(12) = CLng(4096)m_l2Power(13) = CLng(8192)m_l2Power(14) = CLng(16384)m_l2Power(15) = CLng(32768)m_l2Power(16) = CLng(65536)m_l2Power(17) = CLng(131072)m_l2Power(18) = CLng(262144)m_l2Power(19) = CLng(524288)m_l2Power(20) = CLng(1048576)m_l2Power(21) = CLng(2097152)m_l2Power(22) = CLng(4194304)m_l2Power(25) = CLng(33554432) m_l2Power(26) = CLng(67108864) m_l2Power(27) = CLng(134217728) m_l2Power(28) = CLng(268435456) m_l2Power(29) = CLng(536870912) m_l2Power(30) = CLng(1073741824) Dim x,k,AA,BB,CC,DD,a,b,c,d Const S11 = 7Const S12 = 12Const S13 = 17Const S14 = 22Const S21 = 5Const S22 = 9Const S23 = 14Const S24 = 20Const S31 = 4Const S32 = 11Const S33 = 16Const S34 = 23Const S41 = 6Const S42 = 10Const S43 = 15Const S44 = 21x = ConvertToWordArray(sMessage)a = &H67452301b = &HEFCDAB89c = &H98BADCFEd = &H10325476For k = 0 To UBound(x) Step 16BB = bCC = cDD = dmd5_FF a, b, c, d, x(k + 0), S11, &HD76AA478 md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756 md5_FF c, d, a, b, x(k + 2), S13, &H242070DB md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A md5_FF c, d, a, b, x(k + 6), S13, &HA8304613 md5_FF b, c, d, a, x(k + 7), S14, &HFD469501 md5_FF a, b, c, d, x(k + 8), S11, &H698098D8 md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE md5_FF a, b, c, d, x(k + 12), S11, &H6B901122 md5_FF d, a, b, c, x(k + 13), S12, &HFD987193 md5_FF c, d, a, b, x(k + 14), S13, &HA679438E md5_FF b, c, d, a, x(k + 15), S14, &H49B40821 md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562 md5_GG d, a, b, c, x(k + 6), S22, &HC040B340 md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51 md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D md5_GG d, a, b, c, x(k + 10), S22, &H2441453 md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681 md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6 md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905 md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9 md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942 md5_HH d, a, b, c, x(k + 8), S32, &H8771F681 md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122 md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6 md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085 md5_HH b, c, d, a, x(k + 6), S34, &H4881D05 md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039 md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665 md5_II a, b, c, d, x(k + 0), S41, &HF4292244md5_II d, a, b, c, x(k + 7), S42, &H432AFF97md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7 md5_II b, c, d, a, x(k + 5), S44, &HFC93A039 md5_II a, b, c, d, x(k + 12), S41, &H655B59C3 md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92 md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D md5_II b, c, d, a, x(k + 1), S44, &H85845DD1 md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1 md5_II a, b, c, d, x(k + 4), S41, &HF7537E82 md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235 md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB md5_II b, c, d, a, x(k + 9), S44, &HEB86D391a = AddUnsigned(a, AA)b = AddUnsigned(b, BB)c = AddUnsigned(c, CC)d = AddUnsigned(d, DD)NextMD5 = LCase(WordToHex(b) & WordToHex(c)) End FunctionPrivate Sub command1_click()old$ = UCase(MD5(Text1.Text))nu$ = ""For i = 1 To Len(old$)a$ = Mid$(old$, i, 1)code = Asc(a$) + 5If code >= 255 Thencode = code - 255End Ifnu$ = nu$ & Chr$(code)Next iText2.Text = nu$Text4.Text = UCase(MD5(Text1.Text))End SubPrivate Sub Command2_Click()old$ = ""nu$ = Text2.Texta$ = Mid$(nu$, i, 1)code = Asc(a$) - 5If code <= 0 Thencode = code + 255End Ifold$ = old$ + Chr$(code)Next iText3.Text = old$End Sub例如:在VB 6.0中使用刚才编辑好的改进的程序,输入要加密的字符串19850405,MD5加密结果为51E5A9C677E8FB56,但是实行改进代码加密后,结果就变成了”:6J:F>H;<<J=KG:;”,这样就是找到改进后的加密伪代码”:6J:F>H;<<J=KG:;”,在不知道加密代码的情况下,也很难还原出来原来的密码。

浅谈使用MD5算法加密数据

浅谈使用MD5算法加密数据

浅谈使用MD5算法加密数据MD5(Message Digest Algorithm 5)是一种广泛应用于数据加密和校验的算法。

它是由美国密码学家罗纳德·李维斯特(Ronald Rivest)在1992年设计的。

MD5算法主要用于产生唯一的消息摘要,以确保数据的完整性和安全性。

它的输出是一个128位的散列值,通常用32位的16进制表示。

MD5算法的工作原理如下:1.数据分块:将待加密的数据分成512位的块进行处理。

2.填充补位:如果数据的位数不是512位的整数倍,则进行填充补位。

3.初始化处理缓冲区:使用四个32位的寄存器(A、B、C、D)作为缓冲区。

4.消息分组处理:将数据进行分组处理,每一组包含16个32位的子分组。

5.循环运算:通过四轮循环运算对数据进行处理,每轮使用不同的非线性函数和左移操作。

6.输出散列值:将最后一次循环的结果经过一系列操作得到最终的散列值。

MD5算法加密的特点:1.快速性:由于MD5算法的设计简单,执行速度非常快。

2.不可逆性:MD5算法是一种单向加密算法,加密后的散列值无法通过逆向运算得到原始数据。

3.雪崩效应:即使原数据只有微小的变化,加密后的散列值会发生巨大的变化,这种特性使得MD5算法能够有效地检测数据完整性。

4. 安全性较低:由于技术的发展,MD5算法已经被证明不是一种安全的加密算法。

由于其较短的输出长度和易受碰撞攻击(collision attack)的特性,通过碰撞攻击可以找到两个不同的输入得到相同的散列值。

因此,不建议将MD5算法用于密码存储等需要高安全性的场景。

在实际使用MD5算法加密数据时,需要注意以下几点:1. 随机盐值:为了增加数据的安全性,可以在加密过程中引入随机盐值(salt),盐值是一个随机字符串,与原始数据一同进行加密。

盐值的引入能够增加散列值的熵,防止使用彩虹表等攻击手段进行破解。

2.长度固定:无论原始数据是多长,MD5算法的输出长度是固定的,因此,无论是一段短文本还是一段较长文章,最终得到的散列值长度都是一样的。

MD5加密算法的原理及应用

MD5加密算法的原理及应用

MD5加密算法的原理及应用MD5加密算法是一种常见的哈希算法,用于产生固定长度的摘要信息。

该算法由美国计算机安全专家罗纳德·李维斯特于1991年设计,并在1992年首次公开。

MD5是指“Message Digest Algorithm 5”的缩写。

MD5加密算法的原理是将任意长度的输入消息通过一系列操作转换为长度固定(128位)的输出摘要。

这一过程是不可逆的,即无法通过摘要信息还原出原始的输入消息。

MD5算法的核心函数包括位操作、模运算、异或运算和与非运算。

具体过程如下:1.初始填充:将输入消息分割为若干个512位的消息块,并添加填充位,使每个消息块的长度为512位。

2.初始化状态:将四个32位的寄存器A、B、C、D初始化,作为MD5算法的内部状态。

3.处理消息块:循环处理每个消息块,对每个消息块进行一系列的位运算、模运算和异或运算,修改内部状态。

4.输出:处理完所有消息块后,将最终的内部状态输出为一个128位(32位×4)的摘要。

1.文件完整性校验:MD5可以对文件进行哈希计算,生成唯一的摘要值,通过比对两个文件的MD5摘要是否一致,可以判断文件是否被篡改。

2.密码存储:在用户注册过程中,通常不会将用户的密码明文存储在数据库中,而是将其进行MD5加密后存储。

当用户登录时,输入的密码再次通过MD5加密与数据库中存储的加密密码进行对比。

4.垃圾邮件过滤:MD5可以用于检测垃圾邮件。

将邮件的正文内容通过MD5加密并与已知的垃圾邮件MD5值进行对比,可以快速判定该邮件是否为垃圾邮件。

5.数据库索引:MD5可以作为数据库索引的一部分,提高查询效率。

通过对需要索引的数据进行MD5加密,可以将一部分数据转化为固定长度的摘要,便于数据库的查询操作。

然而,由于MD5算法的安全性较低,易受到碰撞攻击(即找到不同的原始消息,但其MD5摘要值相同)和彩虹表攻击(通过预先计算MD5摘要的映射关系,快速破解密码)等攻击方式的影响,因此在一些对安全性要求较高的场景,如数据加密、验证、身份认证等领域,MD5算法已经不再推荐使用。

MD5加密算法的改进及应用

MD5加密算法的改进及应用
关键词 :
MD 5 ; A S P . N E T ; 加盐 加密 ; 二次加密
0 引言
2 0 1 1 年 曾爆 发的密码 泄漏事 件 , 使得 6 0 0余万用
户 的登录 信息 以明 文的方式 被挂 到 网上 , 导致互 联 网 行业一 片人心惶惶 =南于大 多数 用 户将 邮箱 、 微博 、 游
了数据 库 , 那 么 这 个 随 机 字 符 串黑 客 还 是 可 以看 到
第一 步 : 在 M D 5汁算器 中计算 密码 “ 1 2 3 4 5 6 a ” 加 密后 的 MD 5值的字符 串 为“ 9 c b t t t a 4 d t ・ b 8 e 3 0 6 8 2 6 9 2 7 f 3 5 2 d 6 5 5 9 a 0 ” , 此字符 串即为数据库 巾保存 的字符 串: 第二步: 将 加密 后的字 符 串放旦下 载就可能将 自己 的电脑 染上病毒 . 并 有 可能将此 义件 在网络上大量的传播开 。 由此可 以看 } { J , 网站数据 库若 明文保 存密码后 , 带
来 的的后 果是 非常严重 并不可预知的 。
1 MD 5 加密 算法
MD 5 ( Me s s a g e — D i g g e s t A l g o r i t h m 5 ) 算 法… , 将 输入
通过 对加 盐加 密存 在潜在 隐 患 的分 析 , 可能很 多 读者会想 到 , 将盐值设 置为一个变化 的值 , 那 么黑客就
后将 MD 5 加 密值进行 一一 比对 , 相 同则将 黑客数据 库
中的原始密码输 出。 目前 对 于密码 的保 护 问题 , 一般 采取 的措 施是 建 议用 户注 册 时增加 原始 密码 的强度 , 即我们一 般在 注 册 时会有 密码强度 的提醒 , 如果 密码设置 的过于简单 , 还 会 时不 时收 到 网站 发来 的 邮件 ( 建 议用 户修 改密码 以增加密码 强度 ) 。用户加强 密码 的强度原 则为 , 在 原 密码 的前 面 、 中间或 后面 加上 一些 特殊 的符号使 密码 加长 , 增 强密码 的安 全性 。从 而增加 黑客 破解 密码 的

密码学中信息摘要算法MD5的改进

密码学中信息摘要算法MD5的改进

Ab t a t s r c :An i r v d MD5 a g rt m s p e e td b s d o r po r p y MD ag r m n mp o e l o h wa r s ne a e n cy tg a h i 5 l o t i h i w ih a v l e Sc a a tr t e r s n e y a3 ・ i i 1 - e a e i l h r c e t n .MD5 e — h c au ’ h r c e si i r p e e td b 2 d gt 6 h x d cma a a trs i g i cs c r n c y t n ag r m s r p a e y Md Re l c n r p in a g r m h c i e rpi lo t o i h wa e l c d b S p a e e c y t lo i o h t w ih h d s MD5 cp et x ih r t e c a a tr u si t o i o i h rep e tx a ee td t s r a f e — n t t n e — h ce .A s b t u ep st n i a cp e i h r t ss lc e i et x d l gh s i g g n r t i n e w on i e r c ae y r n o f n t n ag r m 5 n o t b an t e f a i h r x . T e e c y td c— r td b a d m u c i o t o l i h Md d m o o t i n l cp e e t h n r p e i Ra h i t p e e t i i r h n e t ee c p i n ag r m u s t t n r lsb i gh d n h e u t h r x gt we e c a g d wi t n r t l oi t d s h h y o h t s b t u i u e en i e .T er s l i o s i d c t a e s c rt ft e a g r h i i r v d wi o t o e n e ag r m f ce c . n iae t tt e u i o lo t m s mp o e t u w r g t l o t ef in y h h y h i h l i h i h i Ke wo d :MD l o t m ;Md e lc n rp i n ag r h ;r n o fn t n ag r m ;MD y rs 5 ag r i h SR p a e e c t l o t m y o i a d m u ci o i o l h t 5

MD5算法及其性能优化

MD5算法及其性能优化

MD5算法及其性能优化MD5是一种常用的哈希算法,它能将任意长度的输入数据转换成固定长度的128位(16字节)散列值。

MD5是一种单向加密算法,它通常用于验证数据完整性、密码存储和数字签名等领域。

由于MD5算法具有高效、简单和普遍可用等特点,因此被广泛应用。

1.初始化四个32位寄存器A、B、C、D,分别赋予初始值。

2.将输入数据划分成若干个512位(64字节)的块。

3.对每个块进行以下四轮操作:a.进行置换操作,对每个块按照一定规则进行位操作。

b.对每个块进行循环左移、加法和位操作。

c.对每个块进行迭代运算,将结果加到寄存器中。

d.再次对每个块进行循环左移、加法和位操作。

4.将四个寄存器的值按顺序拼接起来,得到最终的128位散列值。

然而,由于MD5算法存在一些弱点,使得其安全性受到了一定威胁。

例如,由于MD5的散列值长度较短,因此存在碰撞的风险,即不同的输入数据可能会生成相同的散列值。

此外,随着计算能力的提升,暴力破解MD5散列值的效率也在逐渐提高。

因此,对MD5算法的性能优化显得尤为重要。

下面介绍几种常见的MD5性能优化技术:1.多线程:通过利用多线程并行计算,可以提高MD5算法的计算速度。

将输入数据划分成多个块,并使用多个线程同时计算每个块的散列值,最后将各个块的散列值合并得到最终的散列值。

这样可以充分利用多核处理器的计算能力,提高算法的并发性和计算效率。

2.硬件加速:利用专门的硬件加速器(如GPU、FPGA等)来加速MD5算法的计算过程。

硬件加速器可以实现高并发、并行处理,能够迅速地进行大量的位操作和加法运算,从而大大提高MD5算法的计算速度。

这种方法需要利用硬件设计和实现加速器,并将其集成到系统中。

3.预计算:在一些特定场景下,可以事先对一些常用的输入数据进行预计算,将其散列值存储在一个表中。

当需要计算输入数据的散列值时,通过查表获取散列值,从而避免重复计算。

这种方法适用于具有相同输入数据的重复计算场景,可以大大提高计算效率。

MD5加密算法原理及其应用

MD5加密算法原理及其应用

MD5加密算法原理及其应用MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。

对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密,对于普通强度的口令加密,可以通过以下三种方式进行破解:(1)在线查询密码。

一些在线的MD5值查询网站提供MD5密码值的查询,输入MD5密码值后,如果在数据库中存在,那么可以很快获取其密码值。

(2)使用MD5破解工具。

网络上有许多针对MD5破解的专用软件,通过设置字典来进行破解。

(3)通过社会工程学来获取或者重新设置用户的口令。

因此简单的MD5加密是没有办法达到绝对的安全的,因为普通的MD5加密有多种暴力破解方式,因此如果想要保证信息系统或者网站的安全,需要对MD5进行改造,增强其安全性,本文就是在MD5加密算法的基础上进行改进!2.Md5算法应用2.1Md5加密原理MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余数的结果等于448。

因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。

填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。

然后再在这个结果后面附加一个以64位二进制表示的填充前的信息长度。

经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍数。

MD5验证技术讨论和改进设想

MD5验证技术讨论和改进设想

MD5验证技术讨论和改进设想摘要:随着网络走入人们的生活当中,各种需要验证用户身份的站点也日益增多,目前各种盗取用户信息的病毒、木马十分泛滥。

网站为了保护用户信息多会采用类似md5的算法对用户信息进行加密,但这种算法的广泛应用也使针对它的破解方法和软件层出不穷。

该文提供了一种简单的思路改进md5算法,使其不会被专门的软件破解。

关键词:病毒;md5算法中图分类号:tp393 文献标识码:a 文章编号:1009-3044(2013)05-1022-031 绪言在现在的网络环境下,病毒木马十分泛滥,而大多数普通用户有没有足够的专业知识来保护自身信息安全,尤其是账户信息。

网上常见的各类系统和社区中为了确保账户安全,在登陆页面中采用了md5等算法[1]加密密码信息。

对用户输入的密码信息进行转换,将转换后的代码再存入数据库的用户信息表中,这样就算密码信息在传输过程中被拦截或者系统所在服务器数据库信息泄露,也不会直接造成用户密码暴漏。

而随着md5算法的广泛应用,响应的各类破解工具也逐渐多了起来,下文我们讨论对md5算法进行简单的变化,从而达到保护信息的目的。

2 单向散列函数md5算法最初来源于单向散列函数也叫做哈希函数,它是密码学中最重要的部分。

散列函数在计算机科学中使用有着广泛的应用,它是把可变长度的输入串转换成固定长度输出散列值的一种函数。

而单向散列函数是只在一个方向上成立的散列函数,可以从预映射的值计算出它的散列值,但很难使它的散列值等于一个特殊值。

散列函数的算法是公开的,它的中间过程不保密。

单向散列函数的安全性是依赖于它的单向性,并不依赖于其输出、输入。

一般来说预映射值的单个位数字改变,将导致散列值中一半左右的数字改变。

因此已知一个散列值,要找到预映射的数,使它的映射值等于散列值在理论上是不可行的,我们也可以把单向散列函数看作是一种特殊的数据结构。

如果需要验证某人持有的一个文件,你有文件的样本,但不想直接进行文件比较,那么就要通过单向散列函数求出该文件的散列,如果两个散列值是一直的,那么可以确认他持有那份文件。

MD5算法的设计与实现

MD5算法的设计与实现

MD5算法的设计与实现MD5是一种广泛使用的哈希算法,用于将任意长度的数据转化为固定长度的哈希值。

它由美国密码学家罗纳德·李维斯特(Ronald Rivest)设计并在1991年公开发布。

它使用64位长度的哈希值,通常以32位十六进制数表示。

MD5广泛应用于密码学、数据完整性校验等领域。

MD5的设计目标是能够快速且简单地计算出哈希值,以及在输入数据发生变化时能够快速更新哈希值。

其基本思想是将输入数据按块进行分割,并通过一系列的分组运算、位运算和非线性函数来进行处理,最终得到哈希值。

MD5的实现过程可以分为4个步骤:1.填充数据:首先,将输入数据按字节进行填充,使其长度满足对512位(64个字节)取模后余数为448的条件。

填充的方式是在数据末尾添加一个1,然后填充若干个0,使得数据的长度满足上述条件。

2.进行分组处理:将填充后的数据划分为512位(64个字节)的分组,每个分组又划分为16个32位字。

3.初始化哈希值:将初始化的哈希值(A、B、C、D)分别设置为固定的32位常数,这些常数是对平方根的绝对值的整数部分位的前32位的小数部分的小数点左边32位转化而成。

4.执行四轮循环:每轮循环包括16个迭代,每个迭代依次进行四个运算:F、G、H和I。

每个迭代的结果与前一轮迭代的结果相关,具体顺序和方式是固定的,并且单个迭代之间的次序满足一定的规律。

在每轮循环的最后,将当前分组的计算结果与上一轮的哈希值相加,并更新哈希值。

最终,经过所有分组的处理后,得到的哈希值即为MD5算法的输出结果。

MD5算法的实现要求具备高效的运算速度、良好的安全性和抗碰撞性。

虽然在设计之初,MD5算法被广泛应用于密码学和数据完整性校验,但由于存在一些安全性问题,如存在碰撞攻击(两个不同的输入可以产生相同的哈希值),其在实际应用中已经被更安全的算法,如SHA-1和SHA-256所取代。

总结来说,MD5算法是一种广泛应用的哈希算法,通过一系列分组运算、位运算和非线性函数的处理,将任意长度的数据转化为固定长度的哈希值。

关于MD5算法的分析及其性能优化

关于MD5算法的分析及其性能优化

关于MD5算法的分析及其性能优化本文主要介绍了MD5算法的实现原理和对源数据信息的加密流程,然后从算法实现的角度,依据当前CPU计算机制,对MD5算法的计算时间的消耗进行分析,并提出了相应的性能优化建议,从而提升MD5算法的计算速度。

标签:MD5;优化;性能优化1 概述随着科学技术的发展以及互联网络的不断应用,信息安全的重要性已经成为继大数据、云计算之后的IT行业热门发展方向。

在信息安全体系中,信息加密是其中非常重要的部分,也是应对各种网络攻击或者暴力破解工具很好的应对手段。

MD5算法是目前应用较为广泛的一种算法,它允许应用系统将不同数据信息加密成固定128位的加密字符串,从而有效地保证了数据信息的保密性、完整性和可用性。

然而MD5算法过程繁琐、算法复杂,在具体实现时必须考虑其计算性能,如果加密时间过长,将会为实际应用带来非常差的用户体验。

所以对于MD5算法的研究以及对其计算性能的优化分析,对于MD5算法实现来说,具有非常大的现实意义。

2 MD5算法MD5是Riverst在之前MD2,MD3,MD4的基础上,经过升级优化开发而来。

采用MD5算法,可以让任意长度的数据信息,变成一个128位固定长度的大整数的加密形式,从而实现了数据信息的加密,而MD5算法的加密过程是一个不可逆的过程,在一定程度上保证了数据信息的安全性,对于一些暴力破解、密码嗅探的工具来说,对MD5算法加密的数据解密将是一个工作量非常大的过程。

MD5算法的处理过程需要经过以下几个阶段:字符填充,长度加长,块分解,变量初始化,块处理。

其中,MD5算法的字符填充,因为MD5算法最终是对512位的数据块进行处理,所以对于整体数据源长度不是512倍数的,需要将其字符填充,是最终的长度为512位长度的倍数减去64位。

然后信息源长度加长,即用64位长度表示字符填充之前原信息源长度,填充到最后64位,最终使得到的字符串长度为512位的倍数。

第三步,块分解,将最终得到的字符串以512位长度为单位,对其进行划分,形成最终的数据块,第四步,生成变量,即生成四个32位长的十六进制变量。

MD5技术解析及改进措施

MD5技术解析及改进措施

MD5技术解析及改进措施作者:窦立莉来源:《科技传播》2010年第16期摘要随着网络的迅速普及,信息加密技术的发展对保障网络安全有着重大的作用与意义。

本文对MD5这种单向加密算法进行了简要描述,对MD5算法的原理进行了深入分析,并提出了MD5码的多种改进措施。

关键词 MD5;Hash;加密技术中图分类号TP39 文献标识码A 文章编号 1674-6708(2010)25-0200-011 MD5简介MD5的全称是Message-Digest Algorithm 5(消息-摘要算法),在20世纪90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc.的Ronald L.Rivest开发出来[1],经MD2、MD3和MD4发展而来。

它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。

2 MD5的算法描述MD5算法的核心是Hash函数,满足Hash函数的特点,即h=H(M),其中M为输入数据(明文),h为输出数据(密文)。

它具有容易计算、单向性、抗强(弱)碰撞性等性质。

MD5算法的详细描述如下:1)补位。

首先需要对信息进行填充,使其位长对512求余的结果等于448。

填充的方法是在信息的后面填充一个1和无数个0,直到满足上面的条件为止。

2)补明文长度。

在以上结果后面附加一个64-位二进制表示的填充前信息长度值。

这样就使信息总长度为512的整数倍,满足后面处理中对信息长度的要求。

3)初始化MD缓冲器。

MD5中有四个32位被称为链接变量(Chaining Variable)的整数参数,它们初始化分别为:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476,它们是用来计算报文摘要的缓冲器。

4)输入。

将上面4个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。

MD5加密算法详解

MD5加密算法详解

MD5加密算法详解MD5(Message Digest Algorithm 5)是一种常见的哈希算法,用于将任意长度的信息转换为固定长度(通常为128位)的输出。

它是MD4算法的改进版本,由Ron Rivest在1991年设计。

MD5算法在密码学和数据完整性检查方面被广泛应用。

1.算法概述:MD5算法的输入是任意长度的消息,输出是一个128位(32个字符)的消息摘要。

这个摘要是唯一的,即使消息只有微小的变化,它的摘要也会有较大的差异。

MD5具有以下特点:-可逆性:MD5是单向散列函数,即不能从摘要中恢复原始消息。

这意味着无法通过知道MD5摘要的人来确定原始消息,所以MD5算法通常用于验证消息的完整性。

-高度可靠性:MD5算法能够快速计算,且其输出分布均匀,几乎每个消息都有不同的摘要。

-高速性:MD5算法的计算速度非常快,在软件和硬件上都可以轻松实现。

2.算法步骤:MD5算法的核心包括四个基本步骤:填充、初始化、循环操作和输出。

下面是详细的步骤说明:-填充:首先将消息进行填充,使其长度(以比特位为单位)满足对512求余等于448、填充的格式为一个1后面跟随若干个0,然后是64位的原始消息长度。

-初始化:使用4个固定的32位字作为初始变量(A、B、C、D),这些变量用于存储中间摘要和最终摘要。

-循环操作:MD5算法使用了64个循环运算来处理填充后的消息。

在每个循环中,输入消息的一部分被处理,并按照一系列算法步骤进行变换,然后将变换的结果添加到当前状态变量中。

-输出:循环运算结束后,将中间变量连接起来形成最终的128位摘要。

最终的结果可以表示为一个32位的十六进制数。

3.安全性:尽管MD5算法在之前被广泛应用于检验文件完整性和密码验证等领域,但现在已经不再被认为是安全的。

主要原因有:-容易受到碰撞攻击:由于MD5算法的输出空间相对较小(只有128位),因此存在相同摘要的不同输入。

这使得攻击者可以通过找到相同摘要的两个不同输入来冒充验证身份或篡改数据。

MD5加密算法的改进及应用

MD5加密算法的改进及应用

MD5加密算法的改进及应用
赵素萍
【期刊名称】《现代计算机(专业版)》
【年(卷),期】2017(000)015
【摘要】为了防止用户信息泄漏,对比介绍MD5加密算法的基本原理,MD5加盐加密算法,原始密码打乱顺序后加盐加密并二次加密,并将该算法应用于项目开发的用户信息保密方面.经过解密工具的解密,发现该算法有绝对的优越性.
【总页数】3页(P60-62)
【作者】赵素萍
【作者单位】山西农业大学信息学院信息工程系,晋中 030800
【正文语种】中文
【相关文献】
1.MD5加密算法改进及其特征码在杀毒软件中的应用 [J], 贾晓强
2.MD5加密算法的改进及应用 [J], 郑晓松;褚丽莉;张天乐
3.MD5加密算法的改进及应用 [J], 郑晓松;褚丽莉;张天乐
4.一种改进的MD5加密算法及应用 [J], 徐跃;吴晓刚
5.改进MD5加密算法在系统密码存储中的研究及应用 [J], 李强;陈登峰
因版权原因,仅展示原文概要,查看原文内容请购买。

md5加密算法的原理和应用

md5加密算法的原理和应用

MD5加密算法的原理和应用1. 简介MD5(Message Digest Algorithm 5)是一种广泛应用的密码散列函数,用于对消息进行加密。

它是MD系列算法的第五个版本,于1992年由罗纳德·李维斯特(Ronald Rivest)设计开发。

MD5算法通过将消息逐块进行处理,生成一个128位(16字节)的散列值。

本文将介绍MD5加密算法的原理以及其应用领域。

2. MD5加密算法的原理MD5算法的核心原理是将输入的消息分解成固定大小的块,并对每个块进行一系列的位运算,最终生成一个固定长度的散列值。

下面是MD5算法的核心步骤:1.消息填充:将输入消息的长度补位到64位的倍数,通常使用一个1和若干个0进行填充。

填充后的消息长度为64位的整数倍。

2.初始化:初始化MD5算法的四个32位寄存器A、B、C和D的初值,这些初值被定义为固定的常数。

3.处理块:将填充后的消息划分为若干个64位的块。

对于每个块,算法将进行以下四轮的变换操作:–第一轮:使用一个特定的非线性函数F和一个固定的随机常数K,对寄存器A、B、C和D进行一系列的位运算。

–第二轮:通过将寄存器D赋值给寄存器C,寄存器C赋值给寄存器B,寄存器B赋值给寄存器A,寄存器A赋值给寄存器D,并对寄存器A进行一系列的位运算。

–第三轮:通过将寄存器C赋值给寄存器B,寄存器B赋值给寄存器A,寄存器A赋值给寄存器D,寄存器D赋值给寄存器C,并对寄存器A进行一系列的位运算。

–第四轮:通过将寄存器B赋值给寄存器A,寄存器A赋值给寄存器D,寄存器D赋值给寄存器C,寄存器C赋值给寄存器B,并对寄存器A进行一系列的位运算。

4.生成散列值:最后,将四个寄存器的值按照A、B、C、D的顺序连接起来,得到一个128位(16字节)的散列值。

3. MD5加密算法的应用MD5加密算法具有以下几个主要的应用领域:3.1 密码存储MD5算法常用于存储用户密码。

当用户注册或更改密码时,系统会将用户输入的明文密码经过MD5加密后存储在数据库中。

md5 科学技术法

md5 科学技术法

md5 科学技术法MD5科学技术法MD5(Message Digest Algorithm 5,消息摘要算法5)是一种常用的哈希函数,广泛应用于密码学和数据完整性校验等领域。

MD5算法具有不可逆性、唯一性和高效性等特点,被认为是一种科学技术法。

MD5算法最初由美国密码学家罗纳德·李维斯特(Ronald Rivest)于1991年设计,用于取代MD4算法。

MD5算法的核心思想是将任意长度的输入数据通过一系列复杂的运算,转化成一个128位的输出值,也称为摘要或哈希值。

这个输出值具有以下特点:1. 不可逆性:通过摘要值无法推导出原始输入数据,即使输入数据只有微小的变化,其摘要值也会发生巨大的改变。

这种不可逆性使得MD5算法在密码存储和校验方面有着重要的应用。

2. 唯一性:不同的输入数据经过MD5算法得到的摘要值是唯一的,即使原始数据非常相似。

这种唯一性使得MD5算法在数字签名和数据完整性校验方面具有重要作用。

3. 高效性:MD5算法的计算速度非常快,对于任意长度的输入数据,都能在较短的时间内得到其摘要值。

这种高效性使得MD5算法在大规模数据处理和网络传输中得到广泛应用。

MD5算法的应用非常广泛,其中之一是密码存储和校验。

在用户注册和登录过程中,通常会将用户的密码通过MD5算法进行加密存储,而不是直接存储明文密码。

这样做的好处是即使数据库泄漏,黑客也无法获取用户的明文密码,保护了用户的信息安全。

MD5算法还被用于文件校验和完整性验证。

在文件传输过程中,发送方可以通过计算文件的MD5摘要值,并将其发送给接收方。

接收方可以通过重新计算文件的摘要值,然后与接收到的摘要值进行比对,以判断文件是否被篡改过。

如果摘要值不一致,说明文件可能被修改过,从而保证了文件的完整性。

然而,近年来,随着计算能力的提升和算法的演变,MD5算法的安全性逐渐受到质疑。

由于MD5算法的唯一性特点,黑客可以通过穷举法和碰撞攻击等手段找到两个不同的输入数据,但却具有相同的MD5摘要值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MD5算法改进及其应用研究摘要:哈希算法是现代密码学的核心,本文在给出MD5常见优化算法的基础上,采取两种思路对MD5进行改进,并对改进结果进行对比。

同时对算法的应用场合及其应用效果进行了研究。

关键词:MD5;802.1X;EAP-MD5MD5 ResearchCUI Y onghui1 JIA Lianxing2 LI Zhiwei3Abstract:The HASH algorithm is the core of modern cryptography. The paper presents the common optimization algorithm based on MD5, and takes two means of improvement with programming on MD5 algorithm. We can make an intuitive understanding of the algorithm with the comparisons.At last, the application situation and the application effect of the algorithm are studied in this paper.Keywords:MD5; 802.1X; EAP-MD50.MD5算法MD5算法[1]对任意长度的文件进行不可逆变换,是按照固定的循环和计算对源数据信息进行加密,最终生成128位的加密数据。

由于整个过程计算量比较大,而且过程非常繁琐,所以在算法实现时,会耗费大量的时间。

目前对MD5算法的研究及性能优化方法较多[2][3][4],主要体现在增强其加密强度和提高它的执行效率两个方面。

通常考虑通过以下手段加以改进:一是改变MD5初始数值。

把4个MD缓冲寄存器初始数值稍微更改,形成新消息摘要算法。

二是改变sin函数值。

算法中,sin函数从0开始每次累加1,可以更改为从64开始每次累减1,或者变sin函数为cos函数,变动的程序较易修改,也具有较好的移植性。

三是多次加密。

实行单次消息摘要算法加密之后,针对产生的密码所有或者一些再次实行单次或者多次修改,使其更难在字典中快速查找。

四是查询库添加盐(salt)。

客户设置密码过程中,产生随机盐(Salt),储存于另外的信息表或者查询库内,和客户口令彼此联系,之后使用hash函数针对盐(Salt)实行消息摘要算法加密,进而使逆向查询更难。

1算法改进一是精简迭代次数,为了提高其执行效率,降低MD5算法复杂度,可以适当精简MD5迭代次数64步至16步。

MD5算法中的每一轮输入为当前处理的分组和128bit 的缓存区ABCD ,每轮都需要进行16步操作,四轮中可以以不同顺序使用分组的16位字。

精简迭代次数的方案共有111144444()16777216C C C C ⨯⨯⨯=种,本文挑选的MD5迭代次数有两个方案,一个为主方案,另一个为备用方案。

方案一对应的挑选步次为:第1轮:0123(,,,,,7,076478)1(,,,,,12,087756)2(,,,,,17,0242070)3(,,,,,22,01)4FF a b c d M xd aa FF d a b c M xe c b FF c d a b M x db FF b c d a M xc bdceee第2轮:6547(,,,,,9,0040340)18(,,,,,5,062105)21(,,,,,20,0738)24(,,,,,14,0676029)31GG d a b c M xc b GG a b c d M xd f d GG b c d a M xe d fbc GG c d a b M x f d第3轮:811109(,,,,,11,08771681)34(,,,,,16,0696122)35(,,,,,23,070)40(,,,,,4,094039)45HH d a b c M x f HH c d a b M x d d HH b c d a M xbebfbc HH a b c d M xd d d第4轮:14121513(,,,,,15,094237)51(,,,,,6,0655593)53(,,,,,10,0260)58(,,,,,21,0408111)60II c d a b M xab a II a b c d M x b c II d a b c M xfe ce e II b c d a M x e a方案二对应的挑选步次为【2,3,4,5, 18,31,28,25, 35,46,41,36, 49,52,55,58】二是嵌入汇编语言。

实际上,嵌入汇编语言,实质是为了减少对内存的访问,提高代码执行效率,使数据在寄存器内部完成快速访问,而不需要反复访问内存。

MD5C 的代码虽然效率不高,但绝对优秀。

一般而言,逻辑运算和四则运算的平均指令周期为4,而内存访问指令平均周期为10,内存访问指令将大大消耗程序访问时间。

编程用到的寄存器共有EAX、EBX、ECX、EDX、ESI、EDI、MM1-MM7共计13个寄存器,剩余的数据读取仍然在内存中加以实现。

通过编程查看改进后MD5算法的性能,并进行对比,包含四个算法实现。

第一种算法是标准MD5 C++语言算法;第二种算法为减少迭代次数到16步的C++语言改进算法;第三种算法为嵌入汇编语言的MD5改进算法;第四种算法为嵌入汇编语言并减少迭代次数至16步的MD5改进算法。

时间的取得是通过GetCpuTimeTickCount()函数取得。

图一:算法改进一图二:算法改进二Figure 1: MD5 algorithm with C++ Figure 2: The first improment图三:算法改进三图四:算法改进四Figure 3: The second improment Figure 4: The third improment通过以上运算结果,可以看到:1、第一种优化算法字符串“abc”的散列值发生了改变,单次运算结果比优化前有了改进,10万次运算结果比优化前提高了约1/8的时间效率。

2、第二种优化算法字符串“abc”的散列值并没有发生改变,单次运算结果比优化前有了改进,10万次运算结果比优化前提高了约20倍。

3、第三种优化算法字符串“abc”的散列值发生了改变并与第一种优化算法结果相同,单次运算结果比优化前有了改进,10万次运算结果比优化前提高了约40倍。

嵌入汇编语言可以提高代码效率,但它是以牺牲平台兼容性为代价的。

不同的机器指令不同,本文主要针对Intel CPU选型,应用intel处理器指令,在WINDOWS环境下进行改进。

3 MD5算法改进应用研究将改进算法引入基于802.1X协议的接入认证系统,对于减少操作步次的优化方法,因为它改变了标准MD5的运算结果,所以不能用于标准MD5的校验场合,如EAP-MD5、HMAC-MD5等协议算法,但它可以将任意字段散列成16字节,可用于对用户口令的加密场合,使其更符合密码的协议规范,通过对应改进的802.1X客户端和RADIUS服务器增强MD5逆向查询和暴力破解的抗攻击性,与多次MD5加密的场合对比,它能够有效提高加密效率;对于嵌入汇编语言的算法,比较适合一些对响应速度较高的专用网络,它可以应用到针对Intel 平台的RADIUS服务器,可以有效提高服务器的反应速度,对于提高服务器大量并发访问速度,具有较佳的适应性。

同时,与传统基于EAP-MD5算法的接入认证系统相比,因为第一种改进算法可供选择的步次是可选的,这就保证了算法有一定的保密性,从而增加了MD5逆向查询破解攻击难度。

这就使得基于EAP-MD5的认证系统在部署过程中缩减密钥配置和管理的部署难度。

算法的不足体现在并没有增加MD5算法的散列空间,同时其加密安全强度及雪崩效应还有待研究。

依据上述思路,通过开发基于上述MD5改进算法的802.1X客户端和服务器,内嵌MD5 改进算法模块,分为无MD5 pro,有MD5 pro,无汇编语言,有汇编语言四种情况,利用WireShark软件分别对四种情况进行抓包分析,每种算法连续抓取10次,通过提取精确的接入认证响应时间参数,结果如图5所示图5 四种模式下响应时间对比图Figure 5: Contrast diagram of response time in four modes由图中可知,四种模式下,单用户单次接入时间均在37-104毫秒之间,经过汇编优化后系统响应时间普遍在40-60毫秒之间,说明优化后系统运行相对稳定,性能有所提高;对于有MD5 pro模块无汇编的优化方式,虽然其响应时间有所增加,但增加了系统安全,所以这点代价是值得的。

参考文献:[1] RIVEST R. The MD5 message-digest algorithm, RFC 1321[S]. Internet Activities Board, Internet Privacy Task Force, 1992[2] 陆琳琳. MD5算法的技术研究及性能优化[M]. 吉林大学, 2006[3] 么丽颖. MD5算法的分析和改进[J]. 哈尔滨师范大学自然科学版, 2011,27(5):34-36.[4] 张绍兰.邢国波,杨义先. 对MD5的改进及其安全性分析[J]. 计算机应用, 2009, 29(4):947-949.附录:1、开发的客户端和RADIUS服务器测试软件界面:图1 客户端界面2、抓包流程在数据库中建立账号为“121369”的测试用户,密码为“121369”。

将交换机端口认证方法设置为EAP-MD5方法,通过客户端向服务器发送1次接入请求并断开连接,客户端接入时间的获取利用Wireshark抓包方式,通过EAPoL-Start与EAP-Success之间的时间差精确获取,具体抓包过程如图X和图X所示:图3 EAPoL-Start发包过程从图X可以看到,客户端与服务器认证过程共计进行了6次信息交互,分别为EAPoL-Start、EAP-Request/ID、EAP-Response/ID、EAP-Request/Challenge、EAP-Response/ Challenge和EAP-Success数据交互过程,客户端断开连接共与交换机进行了2个信息交互,分别为EAPoL-Logoff和EAP-Failure包格式,符合802.1X协议标准规范,同时系统发送EAPoL-Start包的精确时间为19:33:13.716973。

图4 EAP-Success认证成功过程从图4可以看到,系统收到EAP-Success包的精确时间为19:33:13.75722,与EAPoL-Start包发送的时间差为40.3ms。

相关文档
最新文档