1、第 1 章 数据加密算法及Hash算法1.1 数据加密概述1.2 DES算法1.3 RSA算法1.4 MD5算法第 1 章 数据加密算法及Hash算法在互联网上进行文件、电子商务往来等信息传输时存在许多不安全因素,尤其是一些机密文件在网络上传输时,信息安全显得尤为重要。不安全性是互联网的存在基础TCP/IP协议所固有的,因此解决这一问题的方案就是加密,加密后的数据被别人获得后,在解密之前是不可读的。数据加密是所有数据安全技术的核心。加密在网络上的作用是,防止重要的或私有化信息在网络上被截获和篡改。需要说明的是,文件加密不只应用于电子邮件等网络上的传输,也可应用于静态文件的保护。1.1 数据加密
2、概述数据加密概述第 1 章 数据加密算法及Hash算法数据加密是指对原来被称为“明文”的数据按某种算法进行处理,使其成为不可读的一段代码的过程。通常把通过加密得到的代码称为“密文”。数据加密的逆过程称为数据解密,即将密文转化为明文的过程。只有利用相应的密钥对密文进行解密,才能显示出明文的内容,通过这样的途径能够 保 护 数 据 不 被 非 授 权 的 访 问 者 非 法 窃 取。加密技术通常分为两大类:常规密钥密码体制和公开密钥密码体制。第 1 章 数据加密算法及Hash算法所谓常规密钥密码体制,是指加密密钥与解密密钥相同的密码体制。这种加密系统又称为对称密钥系统。美国政府采用的DES加密标准
3、就是一种典型的对称式加密方法。公开密钥密码体制使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。公开密钥密码体制采用非对称的加密算法,RSA算法是其中使用最广泛的加密算法之一。RSA使用两个密钥:一个公共密钥,一个私有密钥。如果用其中的一个密钥加密,则可用另一个解密。两个密钥需要配对使用,否则不能解密。公共密钥可以对外公布,私有密钥只有持有者自己拥有。使用公开密钥密码体制很好地避免了密钥的传输安全性问题。第 1 章 数据加密算法及Hash算法美国国家标准局1973年开始研究除国防部外的其他部门的计算机系统的数据加密标准,于1973年5月15日和19
4、74年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为DES密码算法要求)主要为以下四点:(1)提供高质量的数据保护,防止数据未经授权地泄露和未被察觉地修改;(2)具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握;1.2 DES算法算法第 1 章 数据加密算法及Hash算法(3)DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础;(4)实现经济,运行有效,并且适用于多种不同的应用。1977年1月,美国政府正式许可以IBM公司设计的方案作为非机密数据的数据加密标准(Data Encryption Standa
5、rd,DES)。DES算法已经应用于许多需要安全加密的场合,UNIX的密码保护算法就是以DES算法为基础的。第 1 章 数据加密算法及Hash算法DES属于常规密钥密码体制,是一种分组密码。在加密前,先对整个明文进行分组。每一个组长为64 bit(位)。然后对每一个64 bit二进制数据进行加密处理,产生一组64 bit密文数据。最后将各组密文串接起来,即得出整个的密文。使用的密钥长度为64 bit(实际密钥长度为56 bit,有8 bit用于奇偶校验)。1.2.1 DES算法分析算法分析第 1 章 数据加密算法及Hash算法1密钥的生成密钥的生成DES算法的实现过程中经过了16次的迭代,每一
6、次的迭代都需要一个48 bit的密钥。下面介绍如何从用户提供的64 bit的密钥来获得16个48 bit的密钥,实现过程如图1-1所示。第 1 章 数据加密算法及Hash算法图1-1 DES密钥的生成第 1 章 数据加密算法及Hash算法(1)变换密钥。从用户处取得一个64 bit的密钥K,去除其中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥K0。根据表1-1进行密钥变换,得到新的56位密钥。将变换后的密钥等分成两个部分,分别为A0和B0。表1-1中的数据表示密钥K中各位的位置序号。第 1 章 数据加密算法及Hash算法表表1-1 变换密钥数据
7、变换密钥数据57494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124第 1 章 数据加密算法及Hash算法(2)密钥移位。把步骤(1)中生成的两个28 bit的密钥(A0、B0)分别循环左移,得到两个新的28 bit的密钥,分别为A1和B1。(3)密钥选取。把步骤(2)中生成的两个28 bit的密钥(A1、B1)合并,生成一个56 bit的密钥。根据表1-2把生成的56 bit密钥压缩为一个48 bit的密钥K1。(4)循环执行。利用生成的两个
8、28 bit的密钥从步骤(2)开始循环执行,直至生成K16结束。循环过程中,根据表1-3来决定步骤(2)循环左移的位数。第 1 章 数据加密算法及Hash算法表表1-2 压缩密钥数据压缩密钥数据1417112415328156211023191242681672720132415231374755304051453348444939563453464250362932第 1 章 数据加密算法及Hash算法表表1-3 循环左移位数循环左移位数序号12345678位数11222222序号910111213141516位数12222221第 1 章 数据加密算法及Hash算法2数据加密数据加密利用D
9、ES算法对数据加密的过程如图1-2所示。64 bit的明文X进行初始置换IP(Initial Permutation)得出X0,其左半边32 bit和右半边32 bit分别记为L0和R0。然后再经过16次的迭代。如果用Xi表示第i次的迭代结果,同时假设Li和Ri分别代表Xi的左半边和右半边(各32 bit),则从图1-2中不难看出,式中,i=1,2,16,而Ki是48 bit密钥,即从原来的64 bit初始密钥经过若干次变换而得出。)K,R(fLRRLi1i1ii1ii第 1 章 数据加密算法及Hash算法图1-2 DES加密算法第 1 章 数据加密算法及Hash算法 在最后一次的迭代之后,左
10、右半边没有交换。这是为了使算法既能加密又能解密。最后一次的变换是IP的逆变换IP-1,其输入是R16L16。Y即为输出的密文。(1)初始置换IP。取得64位的数据X,如果数据长度不足64位,应该将其扩展为64位(例如补零)。将64位数据按表1-4变换(IP),得到64位的数据X0。第 1 章 数据加密算法及Hash算法表表1-4 初始置换数据初始置换数据58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157第 1
11、 章 数据加密算法及Hash算法(2)数据扩展。把64位数据X0等分成左、右两部分,分别记为L0、R0,各为32位。L0不变,按照表1-5把R0由32位扩展为48位。把扩展后的48位数据与密钥K1进行按位异或操作,形成一个新的48位数据。第 1 章 数据加密算法及Hash算法表表1-5 数据扩展数据扩展3212345456789891011121312131415161716171819202120212223242524252627282928293031321第 1 章 数据加密算法及Hash算法(3)数据压缩。将步骤(2)中异或后生成的48位数据分为8个6位长的部分,第16位称为B1,第
12、712位称为B2,依此类推,第4348位称为B8。Bi(i=1,2,8)长度为6位,分别根据表1-6表1-13中提供的数据进行变换,得到8个4位长的数据,即32位。表1-6表1-13中提供的所有数据都被当作4位长度处理。具体的变换过程是这样的:将Bi的第1位和第6位组合为一个2位长度的变量M,M作为表中的行号。将Bi的第2位到第5位组合为一个4位长度的变量N,N作为表中的列号。根据M、N从表中查到相应的值来代替Bi。第 1 章 数据加密算法及Hash算法表表1-6 数据压缩数据压缩(一一)144131215 11831061259070157414213110612 1195384114813
13、6211 15 12973105015 12824917511314 100613第 1 章 数据加密算法及Hash算法表表1-7 数据压缩数据压缩(二二)1518146113497213 12051031347152814 12011069115014711 10413158126932151381013154211671205149第 1 章 数据加密算法及Hash算法表表1-8 数据压缩数据压缩(三三)10091463155113 12711428137093461028514 12 11 1511364981530111212510 147110 1306987415 14311521
14、2第 1 章 数据加密算法及Hash算法表表1-9 数据压缩数据压缩(四四)713 14306910128511 124151381156150347212110 1491069012 11713 15131452843150610113894511 127214第 1 章 数据加密算法及Hash算法表表1-10 数据压缩数据压缩(五五)21241710 11685315 13014914 11212471315015 10398642111 10 1378159125630141181271142136150910453第 1 章 数据加密算法及Hash算法表表1-11 数据压缩数据压缩(六
15、六)12110 1592680133414751110 1542712956113 1401138914 1552812370410113 116432129515 10 11 141760813第 1 章 数据加密算法及Hash算法表表1-12 数据压缩数据压缩(七七)411214 150813312975106113011749110 143512215861411 13 123714 10 15680592611 1381410795015 142312第 1 章 数据加密算法及Hash算法表表1-13 数据压缩数据压缩(八八)13284615111 10931450127115 138
16、10374 12561101492711419121420610 13 153582114741081315 129035611第 1 章 数据加密算法及Hash算法(4)数据变换。对步骤(3)中生成的32位的数据,根据表1-14中的数据进行变换,产生新的32位的数据。步骤(2)至步骤(4)实现的过程,完成了图1-2中函数f的功能。(5)交换数据。将步骤(4)中变换得出的32位数据与L0进行异或运算,所得的结果即为R1的值。把变换的初始值R0赋于L1。至此,完成了一次迭代过程。(6)迭代。DES算法需要进行16次迭代,把第i-1次得到的Li-1和Ri-1的值作为第i次的输入数据,重复执行步骤(
17、2)至步骤(6)的操作。需要注意的是,第i次迭代要选择密钥Ki与数据进行按位异或操作。第 1 章 数据加密算法及Hash算法表表1-14 数据变换数据变换1672021291228171152326518311028241432273919133062211425第 1 章 数据加密算法及Hash算法为保证加密和解密的对称性,DES算法的前15次迭代需要交换Li和Ri的值,第16次迭代不交换两者的数值。至此,把32位的L16和R16进行合并,生成64位的数据R16L16。(7)IP逆变换。根据表1-15中的数据,重新调整R16L16数据位的位置,结果即为64位的密文Y。第 1 章 数据加密算法
18、及Hash算法表表1-15 IP逆变换数据逆变换数据40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725第 1 章 数据加密算法及Hash算法3数据解密数据解密数据解密的算法与加密算法类似,区别在于步骤(2)中,和数据进行按位异或的密钥的使用顺序有所不同。在加密过程中,第i次迭代采用密钥Ki与数据进行异或,而在解密时第i次迭代采用密钥K17-i和数据进行异或。第 1 章 数据加密算法及Hash算法4算法的安全性
19、算法的安全性DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位密钥的穷举空间为256,这意味着如果一台计算机的速度是每秒检测100万个密钥,则它搜索完全部密钥需要将近2285年的时间,这是难以实现的。当然,随着科学技术的发展,当出现超高速计算机后,可以考虑增长DES密钥来达到更高的保密程度。第 1 章 数据加密算法及Hash算法从DES算法的实现过程可以看出,DES算法中只用到64位密钥中的56位,第8,16,24,64位共8个位并未参与DES运算。这一点向我们提出了一个应用上的要求,即DES算法的安全性是基于56位的组合变化才得以
20、保证的。在实际应用中,我们应该避开使用第8,16,24,64位作为有效数据位,而使用其他的56位作为有效数据,如果不这样,对运用DES来达到保密作用的系统将产生数据被破译的危险。第 1 章 数据加密算法及Hash算法【实验目的实验目的】(1)理解常规密钥密码体制的特点。(2)理解DES算法的实现过程。(3)学会利用C语言实现DES算法。【实验环境实验环境】计算机一台,安装有C语言的编译环境。1.2.2 实验实验DES算法的实现算法的实现第 1 章 数据加密算法及Hash算法【实验过程实验过程】(1)学习DES算法的实现过程。(2)利用C语言编写实现DES算法的程序。附录A中给出了利用C语言实现
21、DES算法的源程序,现对其中出现的主要函数作如下说明:unsigned char*byte2bit(unsigned char byte64,unsigned char bit8)功能:把字节存储转换为比特存储。对于64位(bit)的数据,如果每一位占有1个字节的存储空间,则总共需要64字节的存储空间;如果每一位占有1个比特的存储空间,则总共需要64比特的存储空间,即8个字节。第 1 章 数据加密算法及Hash算法参数:byte64:用来存储64位的数据,每一位占有1个字节。bit8:用来存储64位的数据,每一位占有1个比特。unsigned char*bit2byte(unsigned ch
22、ar bit8,unsigned char byte64)功能:把比特存储转换为字节存储。参数:bit8:用来存储64位的数据,每一位占有1个比特。byte64:用来存储64位的数据,每一位占有1个字节。第 1 章 数据加密算法及Hash算法 void keychange(unsigned char oldkey8,unsigned char newkey168)功能:利用提供的64位密钥,生成16个48位的子密钥。参数:oldkey8:用来存储提供的64位密钥,每一位占1个比特。newkey168:用来存储生成的16个48位的子密钥,每一位占1个比特。不难看出,每个子密钥占用6个字节的存储空
23、间。第 1 章 数据加密算法及Hash算法 void endes(unsigned char m_bit8,unsigned char k_bit8,unsigned char e_bit8)功能:对提供的64位明文,利用给定的64位密钥进行加密操作,生成64位密文。参数:m_bit8:用来存储64位明文,每一位占1个比特。k_bit8:用来存储64位密钥,每一位占1个比特。e_bit8:用来存储64位密文,每一位占1个比特。第 1 章 数据加密算法及Hash算法 void undes(unsigned char m_bit8,unsigned char k_bit8,unsigned cha
24、r e_bit8)功能:对提供的64位密文,利用给定的64位密钥进行解密操作,生成64位明文。参数:m_bit8:用来存储需要解密的64位密文,每一位占1个比特。k_bit8:用来存储64位密钥,每一位占1个比特。e_bit8:用来存储解密后生成的64位明文,每一位占1个比特。第 1 章 数据加密算法及Hash算法 void s_replace(unsigned char s_bit8)功能:对提供的48位数据进行压缩,生成32位的数据,并进行一次变换。参数:s_bit8:用来存储48位的数据。不难看出,这里只有6个字节存储的数据有效。该函数执行完后,s_bit8存储生成的32位数据,即只有4
25、个字节存储的数据有效。(3)调试、验证编写的程序。第 1 章 数据加密算法及Hash算法1.3.1 RSA算法分析算法分析RSA算法依据数论中的一个原理,即:寻求两个大素数比较简单,而将它们的乘积分解则极其困难。1密钥生成密钥生成(1)根据需要选择两个大素数p和q,计算它们的乘积n=pq,保证n满足一定的长度,例如1024 bit,n称为模数。为了说明问题方便,这里假设p=23,q=29,则n=667。(2)计算n的欧拉函数(n)=(p-1)(q-1),它表示不超过n并与n互素的正整数的个数。这里(n)=616。1.3 RSA算法算法第 1 章 数据加密算法及Hash算法(3)在区间(0,(n
26、)内,选择一个与(n)互素的数e,作为公开指数或加密指数。这里选择e=3。(4)计算秘密指数(解密指数)d,满足1d(n),并且ed1(mod(n)。可以计算出d=411。这样便得出公开密钥(加密密钥)PK=e,n和秘密密钥SK=d,n,同时需要保密p、q和(n)的值。这里PK=3,667,SK=411,667。第 1 章 数据加密算法及Hash算法2数据加密数据加密(1)假设需要加密的信息(明文)的二进制形式为m,首先把m分成等长的数据块m1,m2,mj,块长为s,其中2sn,且s尽可能地大。(2)对每一个数据块mi执行运算ci=(mi)e mod n,把得到的数据块c1,c2,cj。拼接起
27、来,即为密文c。第 1 章 数据加密算法及Hash算法3数据解密数据解密(1)解密的过程与加密过程类似,首先把密文的二进制形式c分成等长的数据块c1,c2,cj。(2)对每一个数据块ci执行运算mi=(ci)d mod n,把得到的数据块m1,m2,mj,拼接起来,即为明文m。4算法的安全性算法的安全性RSA算法的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为还没有证明破解RSA算法一定需要作大数分解。假设存在一种无需分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA算法的一些变种算法已被证明等价于大数分解。第 1 章 数据加密算法及Hash算法1.3.2
28、 实验实验RSA算法的实现算法的实现【实验目的实验目的】(1)理解公开密钥密码体制的特点。(2)理解RSA算法的实现过程。(3)学会用C语言实现RSA算法。【实验环境实验环境】计算机一台,安装有C语言的编译环境。第 1 章 数据加密算法及Hash算法【实验过程实验过程】(1)学习RSA算法的实现过程。(2)选取较小的素数,手工计算加密密钥、解密密钥,并对明文进行加密、解密操作,加深对RSA算法的理解。(3)利用C语言编写实现RSA算法的程序。附录B中给出了利用C语言实现RSA算法的源程序,其中模数n为512bit,读者可以参考。该源程序中,主要的函数调用关系可以用图1-3表示。第 1 章 数据
29、加密算法及Hash算法图1-3 RSA算法中主要的函数调用关系第 1 章 数据加密算法及Hash算法现对图1-3中列出的函数加以说明:函数原型:int mpModExp(DIGIT_T y,DIGIT_T x,DIGIT_T e,DIGIT_T m,unsigned int ndigits);功能说明:计算y=xe mod m,其中x、e、m和y均是存储在数组中的大整数。第 1 章 数据加密算法及Hash算法函数原型:int mpModMult(DIGIT_T a,DIGIT_T x,DIGIT_T y,DIGIT_T m,unsigned int ndigits);功能说明:计算a=(x*y
30、)mod m,其中x、y、m和a均是存储在数组中的大整数。函数原型:int mpMultiply(DIGIT_T w,DIGIT_T u,DIGIT_T v,unsigned int ndigits);功能说明:计算乘积w=u*v,其中u、v和w均是存储在数组中的大整数,并且u、v的长度为ndigits,w的长度为u(或v)的长度的两倍,即ndigits2。第 1 章 数据加密算法及Hash算法函数原型:int spMultiply(DIGIT_T p2,DIGIT_T x,DIGIT_T y);功能说明:计算乘积p=x*y,其中x、y均为DIGIT_T类型的整数,而p的长度是x(或y)长度的
31、两倍。函数原型:int mpModulo(DIGIT_T r,DIGIT_T u,unsigned int udigits,DIGIT_T v,unsigned int vdigits);功能说明:计算r=u mod v,其中u、v和r均是存储在数组中的大整数,并且u的长度为udigits,r、v的长度为vdigits。第 1 章 数据加密算法及Hash算法函数原型:int mpDivide(DIGIT_T q,DIGIT_T r,DIGIT_T u,unsigned int udigits,DIGIT_T v,unsigned int vdigits);功能说明:计算商q=u/v,余数r=u
32、 mod v,其中q、r和u的长度为udigits,v的长度为vdigits。函数原型:DIGIT_T mpShortDiv(DIGIT_T q,DIGIT_T u,DIGIT_T v,unsigned int ndigits);功能说明:计算商q=u/v,其中q、u均是存储在数组中的大整数,v是DIGIT_T类型的整数。第 1 章 数据加密算法及Hash算法函数原型:DIGIT_T spDivide(DIGIT_T*q,DIGIT_T*r,DIGIT_T u2,DIGIT_T v);功能说明:计算商q=u/v,余数r=u mod v,其中u的长度是v的长度的两倍。函数原型:static vo
33、id spMultSub(DIGIT_T uu2,DIGIT_T q,DIGIT_T v1,DIGIT_T v0);功能说明:计算uu=uu-q(v1v0),其中uu的长度是q长度的两倍。需要说明的是,虽然用DIGIT_T类型存储v0、v1,但v0、v1只占用一半的存储空间,且(v1v0)表示二者的拼接(不表示乘积)。第 1 章 数据加密算法及Hash算法函数原型:DIGIT_T mpShiftLeft(DIGIT_T a,DIGIT_T b,unsigned int x,unsigned int ndigits);功能说明:计算a=bx,其中a、b均是存储在数组中的大整数,且xx,其中a、b
34、均是存储在数组中的大整数,且xBITS_PER_DIGIT。第 1 章 数据加密算法及Hash算法函数原型:static DIGIT_T mpMultSub(DIGIT_T wn,DIGIT_T w,DIGIT_T v,DIGIT_T q,unsigned int n);功能说明:计算w=w-q*v,其中w=wnwn-1w0,返回值为wn。函数原型:DIGIT_T mpAdd(DIGIT_T w,DIGIT_T u,DIGIT_T v,unsigned int ndigits);功能说明:计算w=u+v,其中u、v、w均是存储在数组中的大整数。(4)调试、验证编写的程序。第 1 章 数据加密算
35、法及Hash算法1.4.1 MD5算法分析算法分析 MD5可对任意长度的报文进行运算,然后得出128 bit的消息摘要,大致的过程如下:(1)增加填充:填充报文,使其长度满足模512(bit)的余数为448。如果原有的报文长度正好是模512为448,则需要增加512 bit的填充。依据原有报文的长度,填充的比特数为1512,填充内容的第1位(比特)为1,其余全部为0。1.4 MD5算法算法第 1 章 数据加密算法及Hash算法(2)补足长度:将原有报文的长度转换为64 bit的数值,如果报文长度超过64 bit所能表示的数据范围,则保留最后64 bit。把该数值增加到上一步填充的数据后面,此时
36、报文的长度应该为512(bit)的整数倍。(3)数据处理:以512(bit)为单位,对“增加填充”和“补足长度”后的报文进行四轮循环的数据处理。数据处理过程中要借助四个特征常数和四个辅助函数。第 1 章 数据加密算法及Hash算法四个特征常数(低位在前)为:A:0 x01234567B:0 x89abcdefC:0 xfedcba98D:0 x76543210四个辅助函数为:F(X,Y,Z)=XY v not(X)Z G(X,Y,Z)=XZ v Y not(Z)H(X,Y,Z)=X xor Y xor Z I(X,Y,Z)=Y xor(X v not(Z)第 1 章 数据加密算法及Hash算法
37、以上四个函数中,输入X、Y、Z均为32 bit,XY表示按位与,X v Y表示按位或,not(X)表示按位取反,X xor Y表示按位异或。数据处理结束,A、B、C、D中存储的计算结果即为128bit的消息摘要。第 1 章 数据加密算法及Hash算法1.4.2 实验实验MD5算法的实现算法的实现【实验目的实验目的】(1)掌握如何使用Hash算法对报文进行鉴别;(2)理解MD5算法的实现过程。(3)学会利用C语言实现MD5算法。【实验环境实验环境】计算机一台,安装有C语言的编译环境。第 1 章 数据加密算法及Hash算法【实验过程实验过程】(1)学习MD5算法的实现过程。(2)利用C语言编写实现
38、MD5算法的程序。附录C中给出了利用C语言实现MD5算法的源程序,其实现的步骤可简单描述如下:调用MD5Init(MD5_CTX*)函数,完成初始化操作,主要对四个特征常数进行定义。调用MD5Update(MD5_CTX*,unsigned char*,unsigned int)函数,对输入的字节串以512 bit(64字节)为单位依次进行四轮循环处理。处理过程通过调用函数MD5Transform(UINT44,unsigned char64)来完成。第 1 章 数据加密算法及Hash算法 对上一步未处理的字节串用变量PADDING64进行填充,使其满足模512(bit)的余数为448。填充结
39、束后,调用MD5Update(MD5_CTX*,unsigned char*,unsigned int)函数,如果字节串长度超过512(bit),则通过函数MD5Transform(UINT44,unsigned char64)对字节串进行四轮循环处理。根据输入字节串长度的数值(存储在变量bits8中),对字节串进行补足处理,使其长度为512(bit)的整数倍。通过在MD5Update(MD5_CTX*,unsigned char*,unsigned int)函数中调用函数MD5Transform(UINT44,unsigned char64),来对最后的512 bit字节串进行处理。第 1
40、章 数据加密算法及Hash算法 输出计算结果,即128 bit的消息摘要值。(3)调试、验证编写的程序。这里给出了几个字符串对应的MD5消息摘要的值,可以用来验证编写的程序:MD5(“”)=d41d8cd98f00b204e9800998ecf8427eMD5(“a”)=0cc175b9c0f1b6a831c399e269772661MD5(abc)=900150983cd24fb0d6963f7d28e17f72第 1 章 数据加密算法及Hash算法MD5(“message digest”)=f96b697d7cb7938d525a2f31aaf161d0MD5(“abcdefghijklmnopqrstuvwxyz”)=c3fcd3d76192e4007dfb496cca67e13bMD5(“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789”)=d174ab98d277d9f5a5611c2c9f419d9fMD5(12345678901234567890123456789012345678901234567890123456789012345678901234567890)=57edf4a22be3c955ac49da2e2107b67a
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。