版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. . . . 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开发出来技术上更加稳定安全更趋于成熟的
2、MD5算法1993年,美国国家标准和技术协会(NIST)提出了安全散列算法(SHA)1995年又发布了一个修订版,即SHA-1.SHA-1与MD5均由MD4导出,所以彼此很相似相应的,它们的强度和其他特征也是相似的2004年8月17日于美国加州圣巴巴拉召开的国际密码学会议(Crypto 2004)上,来自大学的王小云教授做了破译MD5,HAVAL-128,MD4和RIPEMD算法的报告,宣告了MD系列算法的破解对于一个进行身份认证的摘要算法来说,MD5已经是不安全了,但是很多实际的应用领域MD5还有它的使用价值的,所以我们分析探究它的加密原理,我们在此基础上对它的加密进行改进利用,对于我们今后
3、的加密安全工作还是很有帮助的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,p1p2使得h(p1)=h(p2)计算上是不可行的一个强碰撞的Hash函数是满足
4、下列条件的一个函数h:h的输入 可以是任意长度的消息或文件ph的输出长度是固定的给定h和M,计算h(p)是很容易的给定h,找到两个不同的消息p1,p2 ,使得h(p1)=h(p2)在计算上是不可行的(如果有两个不同的消息M,M,使得h(M)=h(M),我们就说这两个消息是碰撞的)1.2 16进制的相关知识十六进制在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(A-F表示10-15)十六进制转换成二进制的比特流(第一列16进制,第二列2进制)0123456789ABCDEF0000000100100011010001010110011110001001101010111100
5、110111101111例如:十六进制为9FD,那么在计算机中二进制表示1(9=1001,F=1111,D=1101)1.3 逻辑运算 逻辑“与”运算,用“”表示真值表表示为pq111100010000二进制按位逻辑“与”运算,即逐位进行逻辑“与”运算,并将逐位逻辑运算的结果进行组合得到的结果例如:如果 ,那么例如:如果,那么首先把转换为二进制为;其次把转换而二进制位;最后按位进行逻辑“与”运算结果为 逻辑“或”运算,用“|”表示真值表表示为:pq|111101011000 逻辑“异或”运算,用“”表示真值表表示为:pq110101011000 逻辑“取反”运算二进制数的所有0改为,1改为0,
6、这个过程叫“取反”例如:如果,那么1.4 模运算基本概念给定一个正整数,任意一个整数,一定存在等式 ;其中是整数,且 ,称为除以的商,为除以的余数对于正整数和整数,定义如下运算: 模加法:,其结果是算术和除以的余数,也就是说,则例如:,那么(注这里“+”是模加法运算)首先将转换为二进制为;其次将转换为二进制为 然后逐位相加结果为1110因为实行的是二进制数据,逢2向前一位进1,所以最终结果为:01110,这个结果的十进制是:,然后模,结果为,它的二进制表示为:11102. MD5加密算法的原理简单的说,MD5加密以512位分组来处理输入的信息,且每一分组又被划分
7、为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(
8、bits)第三步:加载初始标准数据算法中使用了四个32比特的变量A,B,C,D,先将这四个变量初始化为:称它们为变量,接着进行算法的主循环,循环的次数是消息中512比特的块的数目将上面四个标准变量复制到另外四个变量中:A到a,B到b,C到c,D到d第四步:四轮循环运算循环的次数是分组的个数(N+1),每轮循环都很相似,每次操作对abcd中的其中三个作一次非线性函数运算,然后将所得的结果加上第四个变量,文本的一个子分组和一个常数,再将所得结果向左位移一个不定的数,并加上a,b,c,d中之一,最后用该结果取代a,b,c,d中之一设XY表示输入的块,下面描述一些运算:(1)表示与按位逻辑“与”运算(
9、2)表示与按位逻辑“或”运算(3)表示与按位逻辑“异或”运算(4)表示的按位逻辑取“反”(5)+表示整数模加法运算(6)表示将循环左移个单位有四个非线性函数,每轮一个这四个函数的说明:如果,,的对应的位是独立和均匀的,那么结果的每一位也应该是均匀的其中是一个逐位运算的函数,即,如果,那么,否则函数是逐位奇偶操作符(其中“”是逻辑“与”运算,“|”是逻辑“或”运算,“”逻辑“异或”运算,“”逻辑“取反”运算)四轮运算是:假设表示消息的第个子分组(从0到15),表示循环左移位表示表示表示表示这四轮(64步)是:第一轮第二轮第三轮第四轮其中常数可以如下选择:在第步中,是的整数部分,的单位是弧度等于的
10、次方所有这些完成之后,将A、B、C、D分别加上a、b、c、d然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联3.运算原理简举例例如:计算解:不妨假设:要加密的信息为abc,其比特串为01100001 01100010 01100011它的长度是24位,于是添加1个“1”,423个“0”,再加上64比特串(24)=00000000 00000018即x=01100001 01100010 01100011 1 00 00000000 00000018,共512比特,只有16分组为,所以有=00000000=00000018首先计算出A=0000 0001 0010 0011 01
11、00 0101 0110 0111=B=1000 1001 1010 1011 1100 1101 1110 1111=C=1111 1110 1101 1100 1011 1010 1001 1000=D=0111 0110 0101 0100 0011 0010 0001 0000=其次计算 =(1000 1001 1010 1011 1100 1101 1110 11111111 1110 1101 1100 1011 1010 1001 1000)|(0111 0110 0101 0100 0011 0010 0001 00000111 0110 0101 0100 0011 0010
12、 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 1000转换为二进制为1101 0111 0110 1010 1010 0100 0111 1000结果为 =(1000 1001 1010 1011 1100 1101 1110 1111)+(0000 0001 0010 0011 0100 0101 0110 0111+1111 1110 1101 1100 1011 1010
13、 1001 1000+0000 0001 0001 0000 0000 0000 0001 0000)+1101 0111 0110 1010 1010 0100 0111 1000) =(1000 1001 1010 1011 1100 1101 1110 1111)+(0000 0000 0011 1000 0000 0000 0000 1111+1101 0111 0110 1010 1010 0100 0111 1000) =(1000 1001 1010 1011 1100 1101 1110 1111)+(1101 0111 1010 0010 1010 0100 1000 011
14、1) =(1000 1001 1010 1011 1100 1101 1110 1111)+(0000 1111 1010 1111 0100 0101 0100 1001) =1001 1001 0101 1011 0001 0011 0011 1000=955b1338这样就计算出第一步的运算,下面的运算和上面的运算类同就不在这里浪费篇幅4.MD5加密算法的安全性分析关于加密算法的分析就重来没有停止过,现有的加密算法的密钥动辄就256,为强行破解提供了很大的障碍;随着计算机速度的提高,位数还在增减,对密码的分析就成为唯一的突破 口由上面的MD5加密的原理,我们知道,其加密主要有三步:(1)
15、对字符串的填充(2)分段求摘要(3)最终摘要的输出第一步和第三步都不是MD5算法的核心,也不是碰撞的可能发生地,所以下面的介绍还是分析和讨论都是基于第二步进行的4.1各步的碰撞的分析不妨取(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)
16、,(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各
17、圈碰撞的分析从文献7可以知道,要产生对第一轮的碰撞,只需要在报文中修改三位就可以了,设中的最高位,或者相应的位就会出现一定概率的碰撞5.MD5加密技术的实际应用举例MD5加密技术广泛应用于数字签名领域,它的典型应用是对一段信息产生信息摘要,以防止被篡改比如在发布软件的时候,经常会有一个文件扩展名为.md5的文件,在这个文件常只有一行文本,大致结构如:MD5:a5fdfeb0af54ef8397c4ea4a06e25d8f,这就是该软件文件的数字签名,MD5将整个文件当做一个大文本信息,通过其不可逆的字符串变换算法,产生了这个MD5信息摘要在以后传播这个文件的过程中,只要文件的容发生任何形式的改
18、变(包括人为的修改或者下载过程中线路不稳定引起的传输错误等,换句话说,哪怕源文件的一个字符被改变,MD5值也会发生改变),在对这个文件重新计算MD5值时就会发现信息摘要不一样,由此可以判定得到的文件是否被篡改如果再配合一个第三方认证机构,利用MD5加密技术还可以防止文件作者的“抵赖”MD5还广泛用于加密信息上如对于数据库中登陆密码一般都是经过MD5加密后存放的当登陆的时候,根据用户填报的密码生成相应的MD5值再与数据库中的信息对比,从而判定登陆的合法性,但实际中如果把用户的密码MD5处理后再存储到数据库中是不安全的因为用户的密码往往是比较短的,而且很多用户的密码都是使用生日,等比较熟悉的,常用
19、的一些吉利的数字以方便记忆,如果把常用的密码先经过MD5处理形成MD5值集群,然后把要破译的MD5结果相匹配,就可能找到原文因此,对于MD5加密信息时,一般需要同时设置一个随机附加值来保证密码的安全性例如:某用户的注册密码为“move”,则在将密码保存至数据库时应当先在密码原文后附加一个随机附加值,比如附加值为“8dx9087h”,然后将带有附加值的密码经过MD5加密,即将“move8dx9087h”做为原密码进行加密,然后存入数据库中,同时将随机附加码也存入数据库中在检测用户登陆密码时,则将用户输入的密码与数据库中的附加码共同进行MD5加密后进行对比这样可以有效地降低通过密文比对获得密码原码
20、的可能性6.MD5加密算法的改进意见研究的实质是为了对现有的运用提供借鉴,对未来的应用提供前瞻性的认识研究MD5算法就是为了怎样使得碰撞更难通过分析实现以下是对Hash算法的改进策略:(1)增加Hash运算的轮数轮数越多,其计算空间越大,进行运算的计算量就会成百倍成千万倍的增加,这样在无形中就会增加密码破译的难度,这样密码的安全系数就会升高,达到预定的安全指数(2)模运算和位运算是加密算法的主要计算过程可以尝试使用新的理论去实现加密思想,而不单单是运用类同的模运算,可以使用数论,离散对数,椭圆曲线等知识,从根本上做到创新(3)Hash算法的其他设计方法的研究现在无论是SHA-1,HAVAL-1
21、28还是RIPEMD都在一定程度上仿照了MD5加密算法,无论是从消息的填充还是从核心的模运算,位运算都有惊人的相似之处,所以研究新的加密算法已经迫在眉睫,理论创新才是真正的出路7. 附录25 / 25VB6.0中实现MD5改进后的加密算法 Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private m_lOnBits(30) Private m_l2Power(30) Private Function LShift(lValue, iSh
22、iftBits)定义左移函数 If iShiftBits = 0 Then LShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And 1 Then LShift = &H80000000 Else LShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If If (lValue And m_l2Power(31 - iShiftBits) Then LShi
23、ft = (lValue And m_lOnBits(31 - (iShiftBits + 1) * m_l2Power(iShiftBits) Or &H80000000 Else LShift = (lValue And m_lOnBits(31 - iShiftBits) * m_l2Power(iShiftBits) End IfEnd Function Private Function RShift(lValue, iShiftBits)定义右移函数 If iShiftBits = 0 Then RShift = lValue Exit Function ElseIf iSh
24、iftBits = 31 Then If lValue And &H80000000 Then RShift = 1 Else RShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End IfRShift = (lValue And &H7FFFFFFE) m_l2Power(iShiftBits) If (lValue And &H80000000) Then RShift = (RShift Or (&H40000000
25、 m_l2Power(iShiftBits - 1) End IfEnd Function Private Function RotateLeft(lValue, iShiftBits)定义循环左移函数 RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits) End Function Private Function AddUnsigned(lX, lY)定义模加法运算 Dim lX4 Dim lY4 Dim lX8 Dim lY8 Dim lResult lX8 = lX And &H80
26、000000 lY8 = lY And &H80000000 lX4 = lX And &H40000000 lY4 = lY And &H40000000 lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 Then lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 ElseIf lX4 Or lY4 Then If lResult And &H40000000 Then lResult = lResult
27、Xor &HC0000000 Xor lX8 Xor lY8 Else lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 End If Else lResult = lResult Xor lX8 Xor lY8 End If AddUnsigned = lResult End Function Private 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 =
28、 (x And z) Or (y And (Not z) End Function Private Function md5_H(x, y, z) md5_H = (x Xor y Xor z) End Function Private Function md5_I(x, y, z) md5_I = (y Xor (x Or (Not z) End Function Private Sub md5_FF(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac) a = Rot
29、ateLeft(a, s) a = AddUnsigned(a, b) End Sub Private 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 Sub Private Sub md5_HH(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d
30、), x), ac) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private 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 Sub Private Function ConvertToWordArray(sMessage) Dim lMessageLength Dim lNumberOfW
31、ords Dim lWordArray() Dim lBytePosition Dim lByteCount Dim lWordCount Const MODULUS_BITS = 512 Const CONGRUENT_BITS = 448 lMessageLength = Len(sMessage) lNumberOfWords = (lMessageLength + (MODULUS_BITS - CONGRUENT_BITS) BITS_TO_A_BYTE) (MODULUS_BITS BITS_TO_A_BYTE) + 1) * (MODULUS_BITS BITS_TO_A_WOR
32、D) ReDim lWordArray(lNumberOfWords - 1) lBytePosition = 0 lByteCount = 0 Do Until lByteCount >= lMessageLength lWordCount = lByteCount BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByt
33、eCount + 1, 1), lBytePosition) lByteCount = lByteCount + 1Loop lWordCount = lByteCount BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 2) = LShift(lMessage
34、Length, 3) lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) ConvertToWordArray = lWordArray End FunctionPrivate Function WordToHex(lValue) Dim lByte Dim lCount For lCount = 0 To 3 lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) WordToHex = WordToHex &
35、 Right("0" & Hex(lByte), 2) Next End Function Public 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
36、(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) =
37、CLng(1048575) m_lOnBits(20) = CLng(2097151) m_lOnBits(21) = CLng(4194303) m_lOnBits(22) = CLng(8388607) m_lOnBits(23) = CLng(16777215) m_lOnBits(24) = CLng(33554431) m_lOnBits(25) = CLng(67108863) m_lOnBits(26) = CLng(134217727) m_lOnBits(27) = CLng(268435455) m_lOnBits(28) = CLng(536870911) m_lOnBi
38、ts(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_
39、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(10
40、48576) m_l2Power(21) = CLng(2097152) m_l2Power(22) = CLng(4194304) m_l2Power(23) = CLng(8388608) m_l2Power(24) = CLng(16777216) 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)
41、= CLng(1073741824) Dim x,k,AA,BB,CC,DD,a,b,c,d Const S11 = 7 Const S12 = 12 Const S13 = 17 Const S14 = 22 Const S21 = 5 Const S22 = 9 Const S23 = 14 Const S24 = 20 Const S31 = 4 Const S32 = 11 Const S33 = 16 Const S34 = 23 Const S41 = 6 Const S42 = 10 Const S43 = 15 Const S44 = 21 x = ConvertToWordA
42、rray(sMessage) a = &H67452301 b = &HEFCDAB89 c = &H98BADCFE d = &H10325476 For k = 0 To UBound(x) Step 16AA = aBB = bCC = c DD = d md5_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
43、 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,
44、 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,
45、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
46、, 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, &HF4D50D87 md5_GG b, c, d, a, x(
47、k + 8), S24, &H455A14ED md5_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 +
48、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),
49、 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,
50、 &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, &HF4292244 md5_II d, a, b, c, x(k + 7), S42, &H432AFF97 md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7 md5_II b, c, d, a, x(k + 5), S44, &am
51、p;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, &H
52、FE2CE6E0 md5_II c, d, a, b, x(k + 6), S43, &HA3014314 md5_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, &HEB86D391 a = AddUnsigned(a, AA) b = AddUnsigned(b, BB) c = AddUnsigned(c, CC) d = AddUnsigned(d, DD) Next MD5 = LCase(WordToHex(b) & WordToHex(c)End FunctionPrivate Sub command1_click()old$ = UCase(MD5(Text1.Text)nu$ = ""For i = 1 To Len(old$)a$
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省武汉市2024年中考一模数学试题含答案
- 辽宁大学《公共政策理论与应用》2023-2024学年第一学期期末试卷
- 黄河交通学院《艺术实践(2)》2023-2024学年第一学期期末试卷
- 江苏海事职业技术学院《建筑工程进度控制》2023-2024学年第一学期期末试卷
- 【物理】第七章 力 章末练习 2024-2025学年八年级下册人教版物理
- 黑龙江财经学院《医药学术推广综合实训》2023-2024学年第一学期期末试卷
- 重庆三峡职业学院《大数据与数据分析》2023-2024学年第一学期期末试卷
- 重庆城市管理职业学院《消防工程综合》2023-2024学年第一学期期末试卷
- 浙江育英职业技术学院《装饰工程制图及AutoCAD应用》2023-2024学年第一学期期末试卷
- 体现汉字文化的有趣汉字故事
- 建筑工地节前停工安全检查表
- 三年级下册小猿口算题1000道
- QUALITY MANUAL质量手册(英文版)
- 决策的艺术课件
- 国际经济学国际贸易的标准理论
- 8D报告培训教材(PPT 47页)
- -居民死亡医学证明(推断)书
- 糖尿病酮症酸中毒病例讨论-文档资料
- 液相色谱质谱质谱仪LCMSMSSYSTEM
- 民办非企业单位章程核准表-空白表格
- 派克与永华互换表
评论
0/150
提交评论