基于C++的DES算法实现.docx
《基于C++的DES算法实现.docx》由会员分享,可在线阅读,更多相关《基于C++的DES算法实现.docx(34页珍藏版)》请在冰豆网上搜索。
![基于C++的DES算法实现.docx](https://file1.bdocx.com/fileroot1/2023-2/6/692a3859-f713-47e2-a77c-59239aac44d4/692a3859-f713-47e2-a77c-59239aac44d41.gif)
基于C++的DES算法实现
河南农业大学
本科生毕业论文
题目基于C++的DES算法实现
学院
专业班级
学生姓名
指导教师
撰写日期:
年月日
基于C++的DES算法实现
摘要
随着科技的发展,人们在享受信息资源所带来的巨大的方便的同时,信息安全也面临着的巨大考验,信息技术的迅猛发展使得网络环境变得日益复杂。
因此,数据加密便成为了当前我们面临的一大问题,其目的是使信息通过互联网传输时,即使被窃取或截获,也让对方不能了解其真正的含义,对于非法使用者来说,相当于一段乱码。
通过这次研究发现了DES算法是当下使用比较广泛的加密算法,也是最有代表性的分组加密算法,虽然DES加密算法在一些技术面前有被破解的风险,但凭借其自身的优点,相关产品仍然占据市场的主导地位,目前较为广泛的应用于通信加密之中。
本文首先研究了DES算法的基本原理,并且分析了DES算法的优缺点,通过查资料编写了C++的源代码。
并且在后续的研究实验中,在所编写的程序上计算得出了加密后的数据。
关键词:
DES加密算法;数据安全
TherealizationofRSA algorithmbasedonC++
WANGTao
Abstract
Withthedevelopmentofscienceandtechnology,peopleintheenjoymentofinformationresourcestobringgreatconvenienceatthesametime,informationsecurityalsofacesahugechallenge,therapiddevelopmentofinformationtechnologymakesthenetworkenvironmenthasbecomemoreandmorecomplex. Therefore,dataencryptionhasbecomeabigproblemwearefacing.ThepurposeistomaketheinformationthroughtheInternettransmission,evenifthetheftorintercepted,alsoletyouropponentcannotunderstandthetruemeaningof,forillegalusers,whichisequivalenttoagarbled. Firstly,.ThroughthestudyfoundthattheDESalgorithmistodaywidelyencryptionalgorithm,isalsothemostrepresentativeblockencryptionalgorithm,althoughtheDESencryptionalgorithminfrontofsometechnologyhasbeingcracked,butwithitsownadvantages,relatedproductsmarketstilloccupyadominantposition,nowiswidelyusedincommunicationencryption.thispaperstudiesthebasicprincipleoftheDESalgorithm,andanalysestheadvantagesanddisadvantagesofDESalgorithm,searchthroughtheinformationwritteninC++sourcecode. And intheexperimentalstudyof follow-up, in theprogram using theencrypted data
DES:
Encryptionalgorithm;Datasecurity
1绪论
1.1研究背景及目的
随着21世纪的到来,人类已经完全进入了信息时代,目前信息已经成为最为重要的资源,同时信息的保密问题就越来越重要了。
基于目前的网络状况,迫切地需要保证信息传输的安全以及保证信息本身的安全。
随着网络通信越发频繁,为了保证数据在网上传输时的安全,对数据进行加密进而保护就变得非常有必要,才能保证数据传输的安全。
用基于高等数学的某些方法的程序和密钥对信息进行加密.把私人的数据变成一堆看似毫无关联难以理解的一段信息,使只有合法的接受者才知道恢复数据的方式。
而对于非法使用者和窃取者,即使了密文,也不能通过得到的数据恢复原始数据,这就是数据加密。
我们可以通过一个比较简单例子来简要说明数据加密的基本过程。
例如,将数字0,l,2,3,4,⋯,8,9的自然顺序保持不变,但使之与2,3,4,5⋯,0,1分别对应,那么明文“1018”对应的密文就是“3230”,对于不知道密钥的人来说,“3230”就是一串没有任何意义的数据,这种加密方式称为替换加密,属于对称加密的一种,此时的密钥为2。
加密技术发展到今天,主要分为对称加密和非对称加密。
其中, 对称加密是指使用同样的密钥对数据进行加密和解密。
本文讨论的DES算法就是对称加密的一种加密技术,而且也是最重要的一种加密技术之一。
DES对称密钥分组密码的一个典型代表,并且最终被美国国家标准局批准把它作为非机要部门使用的数据加密标准.简称DES,DES 是Data Encryption Standard的缩写。
自从DES算法公布以来,一直被广泛地用于国际上商用保密通信和计算机通信。
但是在现在DES算法比较少的运用在实际生活中,原因是DES加密由于密钥比较简单和新的破译方法不断出现。
更多的情况下是采用增加密钥长度和多重DES加密的办法。
目前来说,DES算法还是具有极高安全性的,除了用穷举搜索法对DES算法进行攻击外,暂时还没有发现更有效的办法。
穷举空间长为256的56BIT密钥,想通过穷举法获得解密密钥,是非常难以实现的,原因是假如使用一台速度是每一秒种检测二百万个密钥的计算机,则它搜索完全部密钥就需要将近1100年的时间。
由此可见,破译者要,但是,随着现代科学技术的不断发展,计算机的运算速度变得越来越快,超高速的计算机的出现将不会遥远,这样为了达到更高的保密程度,我们可考虑把DES密钥的长度继续增长。
C++作为目前较为常用的变编程语言,其地位在计算机语言中也是很高,本文主要研究DES算法基于C++的实现。
DES( Data Encryption Standard)算法的输入数据为64位,但其实际可用密钥却是56位。
虽然随着科学技术的进步,最基本的DES加密算法已经不再像过去那样很安全,但是学习对于过去有着很重要地位,被广泛应用的DES算法,也是百利而无一害的,尤其是DES算法现在还在某些领域发挥着余热。
随着信息技术的快速发展,信息加密技术也伴随着信息技术快速发展。
信息加密技术被广泛地应用到信息安全的各个领域,其成为了网络数据保护的最实用和最安全的方法。
信息加密技术是一门涉及通信学、计算机科学、高等数学等学科的交叉学科。
随着现代密码学的快速发展,改进加密算法更多的是通过在统计学意义上来增加破译的难度,提高破译成本来提高加密算法的安全性,而已经不再像过去一样单纯的依赖于对加密算法本身的保密。
1.2实现方法和意义
由于在目前要求速度的网络上实现非常高的传输速率,在当前如此众多加密算法中,由于对称密钥算法具有加密速度要比其他加密方式快的多的有点,选择对称密钥算法进行加密无疑是比较合适的。
RSA加密算法由于密钥长度很长的缺点,导致它在当今很少被广泛的使用。
另外RSA在软件上的实现时间上也远远不及DES。
所以在高速度的今天,抗住了近20年多年的密码分析DES算法在国内外的还是很具有应用价值的。
DES算法是一个比较优秀的加密算法。
本篇论文的主要工作包括
(1)对DES算法的加密算法的实现过程进行研究理解
(2)设计完成基于VC软件的DES算法实现(3)用C++编程语言完成DES算法模块的编程工作。
(4)完成编制测试代码,在具体的平台上进行测试该实现的正确性,给出测试结果。
2DES加密算法的描述
2.1DES算法的来历
DES最早产生于20世纪70年代初期,是IBM公司在20世纪60年代末设计了一个计算机密码编码学方面的研究项目的最终成果,当时IBM把这个算法卖给了伦敦的劳埃德保险公司。
在1973年时IBM就提交了DES算法给美国标准局NBS(National Bureau of Standards)作为征求国家密码标准方案的预案。
这是当时提出的最好的方法。
因而在1977年被选为数据加密标准。
这就是著名的DES加密算法。
2.2加密算法
加解密技术包含了加密技术和解密技术两个方面。
他们是当前信息安全保密的重要手段。
通过把可理解的明文转化为看似无意义的混乱文字信息,在接收者收到后,采用解密技术将其转换为原来的文字,达到信息保密的目的。
算法和密钥是加解密技术的两个最重要的组成部分。
算法表示通过何种方式将原来的可以理解的文字与某一串特定文字(密钥)相结合。
而密钥就是算法所使用的,用于加密或者解密的一串字符。
加解密技术是一个非常引人入胜的研究领域,作为网络安全领域的基础之一,其自身的进步,推动着各种计算机技术前进,例如密码学,计算机操作系统,程序设计语言等等。
然而,由于其自身的特点以及其他方面的原因,当前对加解密技术的研究还没有达到应有的高度,但是我们相信,在不久的将来,这一领域将会蓬勃发展,取得越来越多的创新成果。
2.2.1对称加密算法
在众多加密算法中,对称加密是比较成熟的一种。
在这种算法中,数据发送方把密钥和明文用算法处理后,生成复杂的密文并发出,收信方使用相同的密钥和算法的逆算法对密文解密这样就可以生成明文,这就要求解密方在这之前得了解加密密钥是什么。
对称加密算法的算法是不保密的,而且效率很高速度很快计算量不大。
但因为交易双方使用的是同一把密钥,使得算法的安全性无法得到保证。
除此以外,用户需要使用别人不知道的一把密钥进行对称加密,这就会使得双方持有的密钥数量极度增长,密钥管理就成了严重问题。
对称加密算法可以加密和认证但不能进行签名,与不保密的密钥加密算法比起来它的应用范围变小了。
所以DES和IDEA在网络安全中得到了大量使用。
AES(AdvancedEncryptionStandard)是一种高级加密标准。
AES共有三个密钥长度,分别为128、192、265位,与DES加密算法仅有的64位密钥相比,其128位密钥要高出1021倍。
IDEA(InternationalDataEncryptionAlgorithm)国际数据加密算法是一种对称分组密码。
它由瑞士联邦理工学院所提出。
其使用一个128位的密钥对64位报文块进行加密操作。
但IDEA算法己经申请了专利,在不被批准的条件下不可使用,同时不得在公共场合使用。
2.2.2非对称加密算法
非对称加密算法是一种密钥的保密方法。
非对称加密算法需要两个密钥:
私有密钥和公开密钥。
私有密钥与公开密钥是一对。
若用私有密钥对数据实施加密,必须用对应的公开密钥方能解密。
若用公开密钥对数据实施加密,必须用对应的私有密钥方能解密。
因为加解密过程中应用了两个不同的密钥,由此得名非对称加密算法。
一方生成一对密钥然后将公开其中一把密钥,另一方使用公用密钥对信息进行加密后再发送给回去,一方用另一把密钥对密文进行解密。
因为非对称加密必须有两个密钥配合使用才能完成加解密过程,所以有利于数据的安全性有较高的保障系数。
然而,非对称加密技术的加密速度和解密速度都很慢,如此一来,相比于对称加密技术,非对称加密技术在加解密数据条件相同时所花费的时间更长。
所以,对于大量文件进行加密,通常不选择非对称加密算法,它一般只适用于加密内容较少的数据。
考虑到非对称加密算法和对称加密算法各有利弊.故在对实际数据加密时,往往将这两种加密算法结合使用。
2.2.3加密算法优缺点分析及选择
以对称加密算法和非对称加密算法的典型代表DES及RSA进行优缺点的比较[:
DES优缺点分析:
(1)具有良好的扩散特性:
一个密文分组可依赖于全部分组明文字母。
这种特性在很多安全服务中得到应用,例如数据完整性等。
(2)DES对插入和修改具有免疫性:
由于信息是按分组进行加密的,因此如果在一个分组插入一个符号,这样就会因为分组长度发生变化而被检测出来。
另外,一个明文字符不可能产生密文字符,同时由于其扩散性能,被改变的信息内容、时间、日期、名字也都能很快地被检测出来。
(3)DES加密速度慢:
分组必须从加密过程开始直到接收整个明文分组后才能进行。
同时,为了做到混乱和扩散,要进行多次迭代,从而使得分组加密的速度降低。
RSA优缺点分析:
(1)加密速度低:
由于两个大素数P和q的乘积N的位数不断增加,因此其速度将不断下降,最快也比DES慢1000倍。
(2)简化密钥管理:
由于加密密钥可以公开,因此可以极大地减少密钥管理的难度,可以提供比传统密码体制更多的安全服务,也可以使用更有效的算法难度大的密码算法。
综合比较两种加密方式,两者虽然加密速度都不是特别快,但是相比之下DES仍比RSA要快许多,同时本系统的设计仍有其他模块从多个角度提高加密性,故综合安全性及加密速度因素,选择使用DES加密算法对后续系统进行设计与实现。
3C++语言
3.1C++语言简述
3.1.1C++语言由来
C++这个名字是RickMascitti于1983年中所建议的,并于1983年12月首次使用。
更早以前,尚在研究阶段的发展中语言曾被称为“newC”,之后是“CwithClass”[3] 。
在计算机科学中,C++仍被称为C语言的上层结构。
它最后得名于C语言中的“++”操作符(其对变量的值进行递增)。
而且在共同的命名约定中,使用“+”以表示增强的程序。
Stroustrup说:
“这个名字象征着源自于C语言变化的自然演进”。
C语言是C++的基础,C++和C语言在很多方面是兼容的。
C语言是一个结构化语言,它的重点在于算法与数据结构。
C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。
所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。
3.1.2C++语言的发展历史
在“CwithClass”阶段,研制者在C语言的基础上加进去的特征主要有:
类及派生类、共有和私有成员的区分、类的构造函数和析构函数、友元、内联函数、赋值运算符的重载等。
1985年公布的C++语言1.0版的内容中又添加了一些重要特征:
虚函数的概念、函数和运算符的重载、引用、常量(constant)等。
1989年推出的2.0版形成了更加完善的支持面向对象程序设计的C++语言,新增加的内容包括:
类的保护成员、多重继承、对象的初始化与赋值的递归机制、抽象类、静态成员函数、const成员函数等。
1993年的C++语言3.0版本是C++语言的进一步完善,其中最重要的新特征是模板(template),此外解决了多重继承产生的二义性问题和相应的构造函数与析构函数的处理等。
1998年C++标准(ISO/IEC14882StandardfortheC++ProgrammingLanguage)得到了国际标准化组织(ISO)和美国标准化协会(ANSI)的批准,标准C++语言及其标准库更体现了C++语言设计的初衷。
名字空间的概念、标准模板库(STL)中增加的标准容器类、通用算法类和字符串类型等使得C++语言更为实用。
此后C++是具有国际标准的编程语言,该标准通常简称ANSIC++或ISOC++98标准,以后每5年视实际需要更新一次标准。
后来又在2003年通过了C++标准第二版(ISO/IEC14882:
2003):
这个新版本是一次技术性修订,对第一版进行了整理——修订错误、减少多义性等,但没有改变语言特性。
这个版本常被称为C++03。
此后,新的标准草案叫做C++0x。
对于C++0x标准草案的最终国际投票已于2011年8月10日结束,并且所有国家都投出了赞成票,C++0x已经毫无疑义地成为正式国际标准。
先前被临时命名为C++0x的新标准正式定名为ISO/IEC14882:
2011,简称ISOC++11标准。
C++11标准将取代现行的C++标准C++98和C++03。
国际标准化组织于2011年9月1日出版发布《ISO/IEC14882:
2011》,名称是:
Informationtechnology--Programminglanguages--C++Edition:
3。
3.2C++语言的优缺点
优点
总得来说,C++语言的主要特点表现在两个方面,一是尽量兼容C,二是支持面向对象的方法。
它操持了C的简洁、高效的接近汇编语言等特点,对C的类型系统进行了改革的扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。
另外,由于C语言的广泛使用,因而极大的促进了C++的普及和推广。
C++语言最有意义的方面是支持面向对象的特征。
虽然与C的兼容使得C++具有双重特点,但他在概念上完全与C不同,更具面向对象的特征。
出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。
关于此类话题,BjarneStroustrup的《C++语言的设计和演化》(1994)里做了详尽的陈述。
C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。
很多优秀的程序框架包括Boost、Qt、MFC、OWL、wxWidgets、WTL就是使用的C++。
缺点:
C++由于语言本身复杂。
C++的编译系统受到C++的复杂性的影响,非常难于编写,即使能够使用的编译器如果存在问题,可能难于被发现。
由于本身的复杂性,复杂的C++程序的正确性相当难于保证。
4DES加密算法的实现
4.1DES加密算法实现的步骤
DES加密处理主要分为三个步骤,第一步,进行初始变换。
主要是针对64位的明文按照初始置换表来进行初始换位。
在初始换位的整体过程中,为了保证输入的数据准确无误,还应该保持转换中的数据与换位表中的数据的过程也要视转换的情况而定。
最后一个步骤是按初始置换表的顺序换位,当明文通过16轮加密过程完整结果后,接着将根据初始换位表的顺序将L16和R16合为一个64BIT的数据,得到的数据密文,就是通过DES算法进行加密后得到的
图3.1演示了DES的总体方案,由图可知,64bit明文和56bit密钥是DES算法的两个输入。
图4.1DES加密过程
通过上图的左边我们可以了解,我们输入的明文经过以下几个阶段的处理。
首先,所输入的明文要进行初始置换,从而产生新的输入。
接下来的阶段是由同一项操作进行16次循环组成的,从图中我们可以看出这个函数包含了两种函数:
替代函数和置换函数。
DES算法产生的最终输出是64bit,它最后一个循环产生的输出的左半部分和右半部分交换组成的,这是产生的输入并不是我们需要的最终输出,将得到的输出经过一个逆初始置的过程就得到了我们需要的最终输出(所谓的逆初始置换就是初始置换的逆置换)。
图4.2的右半部分演示了56bit密钥是如何加密的.对DES加密算法来说,虽然表面上看来密钥是64位的,但是只有56位是有意义的,有8位在算法中被丢弃,分别是8、16、24、32、40、48、56、64位,这些位大多在奇偶校验中使用。
给出的密钥首先要进行一次置换,密钥在16个循环中每环都要通过左移操作和置换操作,这样就生成了每一环的子密钥。
每轮的子密钥是不相同的,原因是每一个循环内使用相同置换函数,但密钥比特重复移位。
表4.1初始置换表
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,37,29,21,13,5,63,55,47,39,31,23,15,7
表4.2逆初始置换表
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
表4.3拓展置换表
32
4
8
12
16
20
24
28
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
21 22 23 24
25 26 27 28
29 30 31 32
5
9
13
17
21
25
29
1
4.2每个循环的详细过程
图4.2展示了每一个循环的具体实现的过程。
由图4.2我们可以发现每个64bit的中间结果被拆分开来,对于每一个循环都把他们当作两个独立的32bit数值处理,在这里我们称他们为L(左)和R(右)。
每一个循环的实现过程都可以用下列公式表示出来:
L[i]=R[i-1](4.1)
R[i]=L[i-1]⊕F(R[i-1],K[i])(4.2)
每个循环过程使用的密钥Ki的长度是48bit。
而输入的R的长度是32bit。
R确定后,会通过一个拓展置换操变为48位的数据,作由表4.3进行。
所得到的48bit再和Ki进行异或。
之后再通过S盒生成了32位的输出。
图4.2DES加密过程
S盒在函数中是由8个S子盒组成的,每一S子盒的输入都为6比特,而产生输出为4比特。
这些变换是由表4.2定义的,这个表的工作原理是:
盒子Si的输入的第一位和第六位放在一起,可以看作一个二进制的数字,这个二进制数相当于一个纵坐标,可以从S盒中选出某一行,而第二第三第四第五位放在一起,也可以看作一个二进制数字,相当于一个横坐标选出需要的一列.当上述的坐标选出后,我们可以找到S盒中的数据,然后将十进制数字转换为二进制数字,这就是最终产生的4bit的输出。
S盒1
14,4,13,1,2,15,11,8,3,10,6,12,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,