1、1DES 数据加密算法的原理及 C+实现摘 要: DES 数据加密算法作为最著名的对称密钥加密算法,在计算机密码学及计算机数据通信的发展过程中起着重要的作用。本篇论文分析了 DES 数据加密算法的基本原理,即如何使 56位密钥迭代生成 16 个子密钥,并用这 16 个子密钥对 64 位数据块进行加密使之变为密文,最后用C+语言对其做出实现。DES 算法在很长一段时间内具有较高的强壮性,为我们进行一般的计算机数据传输活动提供了安全保障。关键词: DES 算法;密钥;加密;明文;密文1 前言 信息安全技术是一门综合的学科,它涉及信息论、计算机科学和密码学等多方面知识,它的主要任务是研究计算机系统和
2、通信网络内信息的保护方法以实现系统内信息的安全、保密、真实和完整。其中,信息安全的核心是密码技术。1973年美国标准局NBS(National Bureau of Standards)征求国家密码标准方案,IBM就提交了其Tuchman-Meyer项目的结果。这是当时提出的最好的方法。因而在1977年被选为数据加密标准。这就是著名的DES加密算法。 2 DES 数据加密标准算法 2.1 网络信息安全与数据加密技术概述 网络技术的飞速发展,网络安全问题越发显得重要。数据保密变换,或密码技术,是对计算机信息进行保护的最实用和最可靠的方法,它是网络安全技术中的核心技术。信息技术的飞速发展,使人们的生
3、活面貌发生了很大的改变,同时信息技术也促进了社会的发展。互联网是一个面向大众的开放系统,对于信息的保密措施和系统的安全性考虑得并不完备,因此引起的网络安全问题也就日益严重。如何保护计算机信息的内容,也即信息内容的保密问题显得越来越重要。从本质上看,网络安全就是网络上的信息安全。从广义上来说,凡是涉及到网络信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全的研究领域。信息安全的技术主要包括监控、扫描、检测、加密、认证、防攻击、防病毒以及审计等几个方面,其中加密技术是信息安全的核心技术,已经渗透到大部分安全产品之中,并正向芯片化方向发展。加密技术是一门古老而深奥的学科,它对一
4、般人来说是陌生的,因为长期以来,它只在很少的范围内,如军事、外交、情报等部门使用。计算机加密技术是研究计算机信息加密、解密及其变换的科学,是数学和计算机的交叉学科,也是一门新兴的学2科。在国外,它已成为计算机安全主要的研究方向,也是计算机安全课程教学中的主要内容。2.1.1 数据加密的起因 当今网络社会选择加密已是别无选择,其一是我们知道在互联网上进行文件传输、电子邮件商务往来时存在许多不安全因素,特别是对于一些大公司和一些机密文件在网络上的传输。而且这种不安全性是互联网存在基础TCP/IP 协议所固有的,包括一些基于 TCP/IP 的服务;另一方面,互联网给众多的商家带来了无限的商机,互联网
5、把全世界连在了一起,走向互联网就意味着走向了世界,这对于无数商家无疑是梦寐以求的好事,特别是对于中小企业。为了解决这一对矛盾、为了能在安全的基础上打开这通向世界之门,我们只好选择了数据加密和基于加密技术的数字签名。 加密在网络上的作用就是防止有用或私有化信息在网络上被拦截和窃取。一个简单的例子就是密码的传输,计算机密码极为重要,许多安全防护体系是基于密码的,密码的泄露在某种意义上来讲意味着其安全体系的全面崩溃。 通过网络进行登录时,所键入的密码以明文的形式被传输到服务器,而网络上的窃听是一件极为容易的事情,所以很有可能黑客会窃取用户的密码,如果是 Root 用户或 Administrator
6、用户,那后果将是极为严重的。 还有如果你公司在进行着某个招标项目的投标工作,工作人员通过电子邮件的方式把他们单位的标书发给招标单位,如果此时有另一位竞争对手从网络上窃取到你公司的标书,从中知道你公司投标的标的,那后果将是怎样,相信不用多说聪明的你也明白。 这样的例子实在是太多了,解决上述难题的方案就是加密,加密后的口令即使被黑客获得也是不可读的,加密后的标书没有收件人的私钥也就无法解开,标书成为一大堆无任何实际意义的乱码。总之无论是单位还是个人在某种意义上来说加密都成为当今网络社会进行文件或邮件安全传输的时代象征! 数字签名就是基于加密技术的,它的作用就是用来确定用户是否是真实的。应用最多的还
7、是电子邮件,如当用户收到一封电子邮件时,邮件上面标有发信人的姓名和信箱地址,很多人可能会简单地认为发信人就是信上说明的那个人,但实际上伪造一封电子邮件对于一个通常人来说是极为容易的事。在这种情况下,就要用到加密技术基础上的数字签名,用它来确认发信人身份的真实性。 类似数字签名技术的还有一种身份认证技术,有些站点提供入站 FTP 和 WWW 服务,当然用户通常接触的这类服务是匿名服务,用户的权力要受到限制,但也有这类服务不是匿名的,如某公司为了信息交流提供用户的合作伙伴非匿名的 FTP 服务,或开发小组把他们的 Web 网页上载到用户的 WWW 服务器上,现在的问题就是,用户如何确定正在访问用户
8、的服务器的人就是用户认为的那个人,身份认证技术就是一个好的解决方案。 3在这里需要强调一点的就是,文件加密其实不只用于电子邮件或网络上的文件传输,其实也可应用于静态的文件保护,如 PIP 软件就可以对磁盘、硬盘中的文件或文件夹进行加密,以防他人窃取其中的信息。 2.1.2 数据加密的基本概念 密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图像的特种符号。凡是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通讯方式为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或截获,窃取者也不能了解信息的内容,从而保证信息
9、传输的安全。任何一个加密系统至少包括下面四个组成部分: 明文,即未加密的报文; 密文,即加密后的报文; 加密解密设备或算法; 加密解密的密钥。数据加密过程就是通过加密系统把原始的数字信息(明文) ,按照加密算法变换成与明文完全不同的数字信息(密文)的过程,如图 2-1 所示:加密密钥 解密密钥明文 传输 明文密文图 2-1 数据加密过程在保障信息安全各种功能特性的诸多技术中,密码技术是信息安全的核心和关键技术。通过数据加密技术,可以在一定程度上提高数据传输的安全性,保证传输数据的完整性。在数据加密系统中,密钥控制加密和解密过程,一个加密系统的全部安全性是基于密钥和算法,所以加密系统的密钥管理是
10、一个非常重要的问题。数据加密技术主要分为数据传输加密和数据存储加密。数据传输加密技术主要是对传输中的数据流进行加密,常用的有: 链路加密链路加密是指传输数据仅在物理层前的数据链路层进行加密,不考虑信源和信宿,它用于保护通信节点间的数据,接收方是传送路径上的各台节点机,信息在每台节点机内都要被解密和再加密,依次进行,直至达到目的地。 节点加密加密 解密4与链路加密类似的节点加密方法,是在节点处采用一个与节点机相连的密码装置,密文在该装置中被解密并被重新加密,明文不通过节点机,避免了链路加密节点处易受功击的缺点。 端到端加密端到端加密是为数据从一端到另一端提供的加密方式。数据在发送端被加密,在接收
11、端解密,中间节点处不以明文的形式出现。端到端加密是在应用层完成的。在端到端加密中,除报头外的报文均以密文的形式贯穿于全部传输过程,只是在发送端和接收端才有加、解密时,报文和报头两者均须加密,因此,不需要有密码设备。端到端加密同链路加密相比,可减少密码设备的数量。信息是由报头和报文组成的,报文为要传送的信息,报头为路由选择信息,由于网络传输中要涉及到路由选择,在链路加密时,报文和报头两者均须加密。而在端到端加密时,由于通道上的每一个中间节点虽不对报文解密,但为将报文传送到目的地,必须检查路由选择信息,因此,只能加密报文,而不能对报头进行加密。这样就容易被某些恶意肇事者分析发觉,并从中获取某些敏感
12、信息。链路加密对用户来说比较容易,使用的密钥较少,而端到端加密比较灵活,对用户可见。在对链路加密中各节点安全状况不放心的情况下也可使用端到端加密方式。2.1.3 数据加密的标准 1973 年,美国国家标准局(NBS)在认识到建立数据保护标准既明显又急迫需要的情况下,开始征集联邦数据加密标准的方案。1975 年 3 月 17 日,NBS 公布了 IBM 公司提供的密码算法,以标准建议的形式在全国范围内征求意见。经过两年多的公开讨论之后,1977 年 7 月 15 日,NBS 宣布接受这个建议,作为联邦信息处理标准 46 号,数据加密标准(Data Encryption Standard),即 D
13、ES 正式颁布,供商业界和非国防性政府部门使用。DES 是分组乘积密码,它用 56 位密钥(密钥总长 64 位,其中 8 位是奇偶校验位)将 64 位的明文转换为 64 位的密文。2.2 DES 算法原理DES 算法是一种用 56 位密钥来加密 64 位数据的对称密钥算法。DES 密码算法要达到的目的主要为以下四点: 提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改; 具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握; DES 密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础; 实现经济,运行有效,并且适用于多种完全不同的应用。2
14、.2.1 DES 算法简介 DES 算法全称为 Data Encryption Standard,即数据加密标准算法,它是 IBM 公5司于 1975 年研究成功并公开发表的。DES 算法的入口参数有三个:Key、Data、Mode。其中 Key 为 8 个字节共 64 位,是 DES 算法的工作密钥;Data 也为 8 个字节 64 位,是要被加密或被解密的数据;Mode 为 DES 的工作方式,有两种:加密或解密。 DES 算法把 64位的明文输入块变为 64 位的密文输出块,它所使用的密钥也是 64 位,其算法主要分为两步:初始置换和逆初始置换。2.2.2 DES 算法加密过程分析DES
15、 算法把 64 位的明文输入块变为 64 位的密文输出块,它所使用的密钥也是 64位,其功能是把输入的 64 位数据块按位重新组合,并把输出分为 L0、R0 两部分,每部分各长 32 位,其变换后 64 位数据在原数据块中所处位置如下所示(按变换后位顺序排列):Initial Permutation(IP)58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,61,53,45
16、,37,29,21,13,5,63,55,47,39,31,23,15,7,即将输入的第 58 位换到第一位,第 50 位换到第 2 位,依此类推,最后一位是原来的第 7 位。L0、R0 则是换位输出后的两部分,L0 是输出的左 32 位,R0 是右 32位,例:设置换前的输入值为 D1D2D3D64,则经过初始置换后的结果为:L0=D58D50D8;R0=D57D49D7。经过 16 次迭代运算后,得到 L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置换的逆运算,例如,第 1 位经过初始置换后,处于第 40 位,而通过逆置换,又将第 40 位换回到第 1 位,其逆
17、置换规则如下表所示,即: Final Permutation(IP-1)40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,放大换位表,即:Expansion (E)32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,12,13,12,1
18、3,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,单纯换位表,即:Permutation P16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,62,8,24,14,32,27, 3, 9,19,13,30,6,22,11, 4,25,Si(i=1,28)为选择函数,其功能是把 6bit 数据变为 4bit 数据。下面给出选择函数 Si(i=1,28)的功能表:选择函数 SiS1:14,4,13,1,2,15,11,8,3,10,6,1
19、2,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,S2:15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,S3:10,0,9,14,6,3,15,5
20、,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,S4:7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,S5:2,12,4,1
21、,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,S6:12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,S
22、7:74,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,S8:13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0
23、,3,5,6,11,在此以 S1 为例说明其功能,我们可以看到:在 S1 中,共有 4 行数据,命名为0,1、2、3 行;每行有 16 列,命名为 0、1、2、3、 14、15 列。现设输入为: DD1D2D3D4D5D6,令:列D2D3D4D5,行D1D6。然后在 S1 表中查得对应的数,以4 位二进制表示,此即为选择函数 S1 的输出。下面给出子密钥 Ki(48bit)的生成算法:初始 Key 值为 64 位,但 DES 算法规定,其中第 8、16、64 位是奇偶校验位,不参与 DES 运算。故 Key 实际可用位数便只有 56 位。即:经过缩小选择换位表 1 的变换后,Key 的位数由
24、64 位变成了 56 位,此 56 位分为 C0、D0 两部分,各 28 位,然后分别进行第 1 次循环左移,得到 C1、D1,将 C1(28 位) 、D1(28 位)合并得到 56 位,再经过缩小选择换位 2,从而便得到了密钥 K0(48 位) 。依此类推,便可得到K1、K2、K15,不过需要注意的是,16 次循环左移对应的左移位数要依据下述规则进行:循环左移位数为:1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1以上介绍了 DES 算法的加密过程。DES 算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥 K15,第二次 K14、,最后一次用 K0,算法本身并没有任何变
25、化。3 DES 加密算法的实现过程3.1 DES 加密算法的软件实现步骤及 C+实现代码 DES 算法处理的数据对象是一组 64 比特的明文串。设该明文串为 m=m1m2m64 (mi=0 或 1)。明文串经过 64 比特的密钥 K 来加密,最后生成长度为 64 比特的密文。8其流程图如图 3-1 所示:在 3-1 流程图中,函数 f 指以下四步操作:在每一轮中,密钥位移位,然后再从密钥的 56 位中选出 48 位。通过一个扩展置换将数据的右半部分扩展成 48 位,并通过一个异或操作替代成新的 32 位数据,再将其置换一次。其中的 IP 与 IP-1为 2.2.2 中所述。而 K1K16 为经
26、过 16 次迭代运算后生成的子密钥。图 3-1 DES 加 密 算 法 流 程 图3.1.1 处理密钥从用户处获取 64 位密钥,其中每一个字节第 8 位为奇偶校验位,为使密钥有正确的奇偶校验,每一字节中值为“1”的二进制位应为奇数个。在密钥计算流程中,首先应对 64 位密钥进行变换:抛弃由 1 获取的原 64 位密钥中的所有校验位,密钥变为 56 位,重排密钥顺序,使原 64 位密钥的第 57 位变为现在的第 1 位,原 49 位变为现在的第 2 位,下面为变换后的 56 密钥在原 64 位密钥中所处的位置:permuted choice 1(pc-1)57 49 41 33 25 17 9
27、1 58 50 42 34 26 1810 2 59 51 43 35 2719 11 3 60 52 44 36963 55 47 39 31 23 157 62 54 46 38 30 2214 6 61 53 45 37 2921 13 5 28 20 12 4将变换后的密钥等分成两部分,前 28 位记为 C0,后 28 位记为 D0。密钥分割完后,将进行子密钥的计算,共需要计算 16 次子密钥,从 i=1 开始,依次按下列步骤进行:分别对 Ci-1和 Di-1作 1 或 2 次循环左移来生成 Ci和 Di。共(16 次) ,每次循环左移位数如 2.2.2 加密过程分析中所述的循环次数。
28、然后,串联Ci,Di,得到一个 56 位数,并对此数作如下变换以产生 48 位子密钥 ki。变换后 48 位密钥在原 56 位数中所处的位置如下(按变换后位顺序排列):Permuted Choice 2(PC-2)14 17 11 24 1 53 28 15 6 21 1023 19 12 4 26 816 7 27 20 13 241 52 31 37 47 5530 40 51 45 33 4844 49 39 56 34 5346 42 50 36 29 32按以上方法循环直到计算出 K16。密钥处理及计算子密钥的 C+程序代码如下:for(i=0;i27) temp_int=temp_
29、int+4; boolkeyij+2=booltemptemp_int/8temp_int%8; back=new union exchange8; for(i=0;i8;i+)backi.bits.bit8=0; backi.bits.bit7=0; backi.bits.bit6=boolkeyi2; backi.bits.bit5=boolkeyi3; backi.bits.bit4=boolkeyi4; backi.bits.bit3=boolkeyi5; backi.bits.bit2=boolkeyi6; backi.bits.bit1=boolkeyi7;subkeytime-1
30、i=backi.in;void shiftall(bool booltemp88) /实现变换后的 56 位密钥在原 64 位密钥中的重新排列12int i; booltemp34=booltemp00; for(i=0;i63;i+)booltempi/8i%8=booltemp(i+1)/8(i+1)%8; booltemp77=booltemp37; 3.1.2 处理 64 位数据块将数据块分成 64 位的数据块,不够 64 位的以适当的方式填补。对 64 位数据块作如下变换,使变换后 64 位数据在原数据块中所处位置如 2.2.2 中的 Initial Permutation(IP)所
31、示。将变换后的数据块等分成前后两部分,前 32 位记为 L0,后 32 位记为 R0。然后用 16 个子密钥对数据块加密,从 i=1 开始。对 32 位数据块 Ri-1进行扩展,变换后 48 位数据在原数据块中所处的位置如2.2.2 中 Expansion (E)所示,然后用 ERi-1与 Ki作异或运算。并将异或所得结果(48 位块)分成 8 个 6 位块。1 到 6 位为 B1,7 到 12 位为 B243 到 48 位为B8。从 j=1 开始,用 S 密箱里的值替换 Bj,按以下步骤进行(S 密箱里的值为 4 位数,共 8 个 S 密箱): 取出 Bj的第 1 和第 6 位串联起来成一个
32、 2 位数,记为 m。m 即是 S 密箱里用来替换 Bj的数所在的列数。 取出 Bj的第 2 至第 5 位串联起来成一个 4 位数,记为 n。n 即是 S 密箱里用来替换 Bj的数所在的行数。 用 S 密箱里的值替换 Bj。如此循环直至 8 个数据块被替换。替换完毕后则把 B1至 B8顺序串联起来得到一个 32 位数,对这个数做变换,使变换后 32 位数据在原数据块中所处的位置如 2.2.2 中 Permutation P 所示(按变换后位顺序排列) 。把得到的结果与 Li-1作异或运算。将计算结果赋给 Ri。并把Ri-1的值赋给 Li。如此循环,直到 K16也被用到。最后将 R16和 R16
33、顺序串联起来得到一个 64 位数,并对这个数实施 2.2.2 中Final Permutation 所示的逆变换。即得到最终的密文。利用密钥来加密 64 位数据块的 C+代码如下:for(i=0;i8;i+) /将 8 字节数据转换为 64 位字串13boolplaintexti0=plaintexti.bits.bit8; boolplaintexti1=plaintexti.bits.bit7; boolplaintexti2=plaintexti.bits.bit6; boolplaintexti3=plaintexti.bits.bit5; boolplaintexti4=plaint
34、exti.bits.bit4; boolplaintexti5=plaintexti.bits.bit3; boolplaintexti6=plaintexti.bits.bit2; boolplaintexti7=plaintexti.bits.bit1; for(time=0;time15;time+) /循环 16 次,用密钥加密数据for(i=0;i4;i+) /将 32 位数据块扩展为 48 位数据块boolplaintexti*20=0; boolplaintexti*21=0; boolplaintexti*2+10=0; boolplaintexti*2+11=0; boolp
35、laintexti*23=booltempi+40; boolplaintexti*24=booltempi+41; boolplaintexti*25=booltempi+42; boolplaintexti*26=booltempi+43; boolplaintexti*2+13=booltempi+44; boolplaintexti*2+14=booltempi+45; boolplaintexti*2+15=booltempi+46; boolplaintexti*2+16=booltempi+47; boolplaintexti*22=booltempi+4-17; boolpla
36、intexti*2+12=booltempi+43; boolplaintexti*27=booltempi+44;if(i!=3) boolplaintexti*2+17=booltempi+4+10; boolplaintext02=booltemp77; boolplaintext77=booltemp40;back=new union exchange8; for(i=0;i8;i+) /将扩展后的明文与密钥做异或运算14backi.in=subkeytimei; backi.bits.bit6=backi.bits.bit6boolplaintexti2; backi.bits.bi
37、t5=backi.bits.bit5boolplaintexti3; backi.bits.bit4=backi.bits.bit4boolplaintexti4; backi.bits.bit3=backi.bits.bit3boolplaintexti5; backi.bits.bit2=backi.bits.bit2boolplaintexti6; backi.bits.bit1=backi.bits.bit1boolplaintexti7; for(i=0;i4;i+) /把 B1至 B8顺序串联起来得到一个 32 位数,并对其做 P 置换ptempi0=backi*2.bits.bi
38、t4; ptempi1=backi*2.bits.bit3; ptempi2=backi*2.bits.bit2; ptempi3=backi*2.bits.bit1; ptempi4=backi*2+1.bits.bit4; ptempi5=backi*2+1.bits.bit3; ptempi6=backi*2+1.bits.bit2; ptempi7=backi*2+1.bits.bit1; for(i=0;i4;i+)for(j=0;j8;j+)temp32ij=booltempij; booltempij=booltempi+4j; for(i=0;i4;i+)for(j=0;j8;
39、j+)temp_int=pij-1; pppij=ptemptemp_int/8temp_int%8; 15for(i=0;i4;i+) /将得到的结果与 Li-1做异或运算for(j=0;j8;j+)booltempi+4j=pppijtemp32ij; for(i=0;i4;i+) for(j=0;j8;j+)temp32ij=booltempij; booltempij=booltempi+4j; booltempi+4j=temp32ij; for(i=0;i8;i+)boolplaintext7-i0=booltemp4i; boolplaintext7-i1=booltemp0i;
40、 boolplaintext7-i2=booltemp5i; boolplaintext7-i3=booltemp1i; boolplaintext7-i4=booltemp6i; boolplaintext7-i5=booltemp2i; boolplaintext7-i6=booltemp7i; boolplaintext7-i7=booltemp3i; 3.2 DES 数据加密算法执行结果图 3-1 程序运行结果:输入界面16图 3-2 程序运行结果:输出界面以上为 DES 数据加密算法利用 C+语言在 windows xp 环境下的调试结果,其中图3-1 为输入明文与密钥界面,当输入这
41、两项内容后,按回车键,则出现如图 3-2 所示的界面。此即为所得到的密文输出。经检验知结果正确。当然,在正确结果出现之前,程序也出现了一些细节性的错误,但经过仔细的分析与改正后,最终得出了正确的结果。4 结 论DES 算法具有极高的安全性,到目前为止,除了用穷举搜索法对 DES 算法进行攻击外,还没有发现更有效的办法。而 56 位长的密钥的穷举空间为 256,这意味着如果一台计算机的速度是每秒检测一百万个密钥,则他搜索完全部密钥就需要将近 2285 年的时间,可见,这是难以实现的。当然,随着科学技术的发展,当出现超高速计算机后,可以考虑把 DES 密钥的长度再增长一些,以此来达到更高的保密程度
42、。由上述 DES 算法介绍可以看到,DES 算法中只用到 64 位密钥中的其中 56 位,而第8,16, 24,64 位 8 个位并未参与 DES 运算,这一点,提出了一个应用上的要求,即 DES 的安全性是基于除了 8,16,24,64 位外的其余 56 位的组合变化才得以保证的。因此 ,在实际应用中,应避开使用第 8,16,24,64 位作为 DES 密钥的有效数据位,才能保证 DES 算法安全可靠。对运用 DES 来达到保密作用的系统产生数据被破译的危险,这正是 DES 算法在应用上的误区。避开 DES 算法应用误区的具体操作:在 DES 密钥 Key 的使用、管理及密钥更换的过程中,应
43、绝对避开 DES 算法的应用误区,即绝对不能把 Key 的第 8,16,24,64位作为有效数据位来对 Key 进行管理,这一点,对应用 DES 加密的用户来说要高度重视。有些网络,利用定期更换 DES 密钥 Key 的办法来进一步提高系统的安全性和可靠性,如果忽略了上述应用误区,那么,更换新密钥将是徒劳的,对网络的安全运行将十分危险,所以更换密钥一定要保证新 Key 与旧 Key 真正的不同,即除了第8,16,24,64 位以外其他位数据发生了变化,这一点是非常重要的。目前在国内,DES 算法在 POS、ATM、磁卡及智能卡(IC 卡) 、加油站、高速公路收17费站等领域被广泛应用,以此来实
44、现关键数据的保密,如信用卡持卡人的 PIN 的加密传输,IC 卡与 POS 间的双向认证、金融交易数据包的 MAC 校验等,均用到 DES 算法。随着信息化和数字化社会的发展,随着计算机和 Internet 的普及,密码学必将在国家安全、经济交流、网络安全及人民生活等方面发挥更大的作用 。参考文献: 1 蔡皖东.网络与信息安全M. 陕西:西北工业大学出版社,20042 数字时代工作室.个人用网安全与黑客防范技术M. 北京:人民邮电出版社,20013 卢开澄.计算机密码学-计算机网络中的数据保密与安全M.北京:清华大学出版社,20034 张千里,陈光英.网络安全新技术M. 北京:人民邮电出版社,2003 5 Robert B. Murry, C+ Strategies and TacticsJ, Addison-Wesley, 19936 Marshall P. Cline and Greg A. Lomow, C+ FAQsJ, Addison-Wesley, 1995