毕业设计(论文)-基于VC++的DES算法的实现.doc

上传人:哈尼dd 文档编号:3283558 上传时间:2019-08-08 格式:DOC 页数:28 大小:186.02KB
返回 下载 相关 举报
毕业设计(论文)-基于VC++的DES算法的实现.doc_第1页
第1页 / 共28页
毕业设计(论文)-基于VC++的DES算法的实现.doc_第2页
第2页 / 共28页
毕业设计(论文)-基于VC++的DES算法的实现.doc_第3页
第3页 / 共28页
毕业设计(论文)-基于VC++的DES算法的实现.doc_第4页
第4页 / 共28页
毕业设计(论文)-基于VC++的DES算法的实现.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《毕业设计(论文)-基于VC++的DES算法的实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-基于VC++的DES算法的实现.doc(28页珍藏版)》请在三一文库上搜索。

1、地方生学员毕业设计报告 报告题目:基于 VC+的 DES 算法的实现 学员姓名: 学员队别:四系二十七队 专业名称:网络工程 指导教员: 二一一年四月十二日 中国人民 解 放 军 电子工程学院 摘 要 本毕业设计研究的是 DES 加解密算法的实现。DES 算法是由 IBM 公司研制的一种对称加密算法,具有速度快,执行效率高等优点。在 POS、ATM、磁卡、智能卡以及信息安全领域得到广泛应用。 本文介绍了 DES 算法的相关背景,阐述了 DES 算法的基本原理,并 在此基础上详细讨论了 DES 算法的实现方法和流程。同时,采用 VC+ 软件开发平台,结合面向对象方法,通过编程实现了基于 DES

2、算法的加 解密功能。 关键词:DES;保密通信;多线程 Abstract The graduation project is the study of DES encryption and decryption algorithm. DES algorithm developed by IBM, a symmetric encryption algorithm, has the speed, the implementation efficiency. In the POS, ATM, magnetic cards, smart cards, and is widely used in inf

3、ormation security. This article describes the background of the DES algorithm, described the basic principles of DES algorithm, and on this basis a detailed discussion on the DES algorithm implementation methods and processes. At the same time, using VC + + software development platform, combined wi

4、th object- oriented method, by programming algorithm based on DES encryption and decryption functions. Keywords: DES; secure communications; multi-threading 目 录 1 引言.1 1.1 历只背景 .1 1.2 国内外现状 .1 1.3 课题的意义 .1 1.4 本课题的实现方法 .2 2 课题基础与理论.3 2.1 开发环境 VISUAL C+.3 2.2 加密体制与 DES 算法3 2.2.1 算法与加密体3 2.2.2 加密解密的概念

5、加密方法以及应用5 2.2.3 密码学简介8 2.2.4 算法的安全性9 3 DES 算法描述 .11 3.1 DES 算法框图11 3.2 DES 解密12 3.3 算法流程12 4 算法实现及应用.16 4.1 应用程序结构 .16 4.2 加密算法 VC+实现.16 4.3 应用程序功能模块定义 .19 5 测试.21 结 论.22 致 谢.23 参考文献.24 1 基于基于 VC+的的 DES 算法的实现算法的实现 1 引言 1.1 历只背景 美国国家标准局 1973 年开始研究除国防部外的其它部门的计算机 系统的数据加密标准,于 1973 年 5 月 15 日和 1974 年 8 月

6、 27 日先后两 次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称 为 DES 密码算法要求)主要为以下四点: 1提供高质量的数据保护,防 止数据未经授权的泄露和未被察觉的修改;2具有相当高的复杂性,使得 破译的开销超过可能获得的利益,同时又要便于理解和掌握;3DES 密 码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保 密为基础;4实现经济,运行有效,并且适用于多种完全不同的应用。 1977 年 1 月,美国政府颁布:采纳 IBM 公司设计的方案作为非机密数据 的正式数据加密标准(Des Data Encryption Standard)。 1.2 国内外现状 D

7、es 算法的程序在国内外的使用都很普遍,在很多领域都有应用,不 但有软件的实现也有基于硬件的实现,在基于硬件级的实现是为了提高 Des 的工作效率,提高加解密速度,针对比较高的应用场合而设计。软件 实现比较普遍,产品价格适宜。在目前的环境下很多地方都可以找到 Des 算法实现的源代码。 1.3 课题的意义 目前在国内,随着三金工程尤其是金卡工程的启动,DES 算法在 POS、ATM、磁卡及智能卡(IC 卡)、加油站、高速公路收费站等领域被广 泛应用,以此来实现关键数据的保密,如信用卡持卡人的 PIN 的加密传 输,IC 卡与 POS 间的双向认证、金融交易数据包的 MAC 校验等,均用 到 D

8、ES 算法。另一方面随着 Internet 日益广泛的应用,黑客行为也是有增 无减。木马病毒无处不在,如何有效地抵御各种机密信息不被窃取,一直 2 是信息安全领域的焦点。对消息加密是能达到保密信息不被非法访问和 窃取的一种有效手段,而 Des 算法又是消息加密的一种常用的方法,因 此对于算法的实现意义是重大的,同时对于综合运用大学期间各科计算 机基础知识是一个非常好的机会。 1.4 本课题的实现方法 本课题采用 Visual C+软件开发工具来实现 Des 算法,按照 Des 算 法的算法流程建立各功能函数的函数原型,根据各模块的需要调用相应 的功能函数,最终达到算法的实现和应用。 3 2 课

9、题基础与理论 2.1 开发环境 Visual c+ VC 自诞生以来,一直是 Windows 环境下最主要的应用开发系统之 一,Visual c+不仅是 C+语言的集成开发环境,而且与 Win32 紧密相连, 利用 Visual c+开发系统可以完成各种各样的应用程序开发,从底层软件 到上层直接面向用户的软件,强大的调试功能为大型复杂软件的开发提 供了有效的排错手段。 进入 20 世纪 90 年代以来,随着多媒体技术和图形图像技术的不断 发展,可视化技术(Visual)得到广泛重视,越来越多的计算机专业人员和 非专业人员都开始研究并应用可视化技术。所谓可视化,一般是指软件开 发阶段的可视化和计

10、算机图形技术和方法的应用。可视化编程就是软件 开发阶段的可视化。Visual c+是一款很好的可视化开发工具。界面友好, 缩短了开发时间,便于程序员操作。 开发环境是程序员同 VC+的交互界面,通过 Visual c+程序员可以 直接访问 C+源代码编辑器、资源编辑器、使用内部调试器还可以创建项 目文件。 2.2 加密体制与 DES 算法 2.2.1 算法与加密体 据记载,公元前 400 年,古希腊人发明了置换密码。1881 年世界上的 第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼 格玛”密码机,密码学在战争中起着非常重要的作用。 随着信息化和数字化社会的发展,人们对信息安

11、全和保密的重要性 4 认识不断提高,于是在 1997 年,美国国家标准局公布实施了“美国数据加 密标准(DES)”,民间力量开始全面介入密码学的研究和应用中,采用的 加密算法有 DES、RSA、SHA 等。随着对加密强度需求的不断提高,近期 又出现了 AES、ECC 等。使用密码学可以达到以下目的:保密性:防止用 户的标识或数据被读取。数据完整性:防止数据被更改。身份验证:确保数 据发自特定的一方。根据密钥类型不同将现代密码技术分为两类:对称加 密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称钥匙加 密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得 这把钥匙,并保持钥

12、匙的秘密。非对称密钥加密系统采用的加密钥匙(公 钥)和解密钥匙(私钥)是不同的。对称加密算法用来对敏感数据等信息进 行加密,常用的算法包括:DES(Data Encryption Standard):数据加密标准, 速度较快,适用于加密大量数据的场合。3DES(Triple DES):是基于 DES,对一块数据用三个不同的密钥进行三次加密,强度更高。 AES(Advanced Encryption Standard):高级加密标准,是下一代的加 密算法标准,速度快,安全级别高。加密算法林林种种,那我们在实际使 用的过程中究竟该使用哪一种比较好呢?我们应该根据自己的使用特点 来确定,由于非对称加

13、密算法的运行速度比对称加密算法的速度慢很多, 当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。 对称加密算法不能实现签名,因此签名只能非对称算法。 由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接 决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密 算法。在实际的操作过程中,我们通常采用的方式是:采用非对称加密算 法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成 了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便 管理密钥的优点。如果在选定了加密算法后,那采用多少位的密钥呢?一 般来说,密钥越长,运行的速度就越慢,应该根据

14、的我们实际需要的安全 级别来选择,一般来说,RSA 建议采用 1024 位的数字,ECC 建议采用 160 位,AES 采用 128 为即可。 随着密码学商业应用的普及,公钥密码学受到前所未有的重视。除传 统的密码应用系统外,PKI 系统以公钥密码技术为主,提供加密、签名、 认证、密钥管理、分配等功能。保密通信:保密通信是密码学产生的动因。 5 使用公私钥密码体制进行保密通信时,信息接收者只有知道对应的密钥 才可以解密该信息。数字签名:数字签名技术可以代替传统的手写签名, 而且从安全的角度考虑,数字签名具有很好的防伪造功能。在政府机关、 军事领域、商业领域有广泛的应用环境。秘密共享:秘密共享技

15、术是指将 一个秘密信息利用密码技术分拆成 n 个称为共享因子的信息,分发给 n 个成员,只有 k(kn)个合法成员的共享因子才可以恢复该秘密信息,其中 任何一个或 m(mk)个成员合作都不知道该秘密信息。利用秘密共享技术 可以控制任何需要多个人共同控制的秘密信息、命令等。认证功能:在公 开的信道上进行敏感信息的传输,采用签名技术实现对消息的真实性、完 整性进行验证,通过验证公钥证书实现对通信主体的身份验证。密钥管理: 密钥是保密系统中更为脆弱而重要的环节,公钥密码体制是解决密钥管 理工作的有力工具;利用公钥密码体制进行密钥协商和产生,保密通信双 方不需要事先共享秘密信息;利用公钥密码体制进行密

16、钥分发、保护、密 钥托管、密钥恢复等。基于公钥密码体制可以实现以上通用功能以外,还 可以设计实现以下的系统:安全电子商务系统、电子现金系统、电子选举 系统、电子招投标系统、电子彩票系统等。公钥密码体制的产生是密码学 由传统的政府、军事等应用领域走向商用、民用的基础,同时互联网、电 子商务的发展为密码学的发展开辟了更为广阔的前景。 2.2.2 加密解密的概念加密方法以及应用 随着网络技术的发展,网络安全也就成为当今网络社会的焦点中的 焦点,几乎没有人不在谈论网络上的安全问题,病毒、黑客程序、邮件炸 弹、远程侦听等这一切都无不让人胆战心惊。病毒、黑客的猖獗使身处今 日网络社会的人们感觉到谈网色变,

17、无所适从。但我们必需清楚地认识到, 这一切一切的安全问题我们不可一下全部找到解决方案,况且有的是根 本无法找到彻底的解决方案,如病毒程序,因为任何反病毒程序都只能在 新病毒发现之后才能开发出来,目前还没有哪能一家反病毒软件开发商 敢承诺他们的软件能查杀所有已知的和未知的病毒,所以我们不能有等 网络安全了再上网的念头,因为或许网络不能有这么一日,就象“矛”与 “盾”,网络与病毒、黑客永远是一对共存体。现代的电脑加密技术就是适 6 应了网络安全的需要而应运产生的,它为我们进行一般的电子商务活动 提供了安全保障,如在网络中进行文件传输、电子邮件往来和进行合同文 本的签署等。其实加密技术也不是什么新生

18、事物,只不过应用在当今电子 商务、电脑网络中还是近几年的历史。 下面我们就详细介绍一下加密技术的方方面面。加密作为保障数据 安全的一种方式,它不是现在才有的,它产生的历史相当久远,它是起源 于要追溯于公元前 2000 年(几个世纪了),虽然它不是现在我们所讲的加 密技术(甚至不叫加密),但作为一种加密的概念,确实早在几个世纪前就 诞生了。当时埃及人是最先使用特别的象形文字作为信息编码的,随着时 间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他 们的书面信息。近期加密技术主要应用于军事领域,如美国独立战争、美 国内战和两次世界大战。最广为人知的编码机器是 German Enigm

19、a 机, 在第二次世界大战中德国人利用它创建了加密信息。 此后,由于 Alan Turing 和 Ultra 计划以及其他人的努力,终于对德国 人的密码进行了破解。当初,计算机的研究就是为了破解德国人的密码, 人们并没有想到计算机给今天带来的信息革命。随着计算机的发展,运算 能力的增强,过去的密码都变得十分简单了,于是人们又不断地研究出了 新的数据加密方式,如利用 ROSA 算法产生的私钥和公钥就是在这个基 础上产生的。数据加密的基本过程就是对原来为明文的文件或数据按某 种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只 能在输入相应的密钥之后才能显示出本来内容,通过这样的途径

20、来达到 保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该 编码信息转化为其原来数据的过程。当今网络社会选择加密已是我们别 无选择,其一是我们知道在互联网上进行文件传输、电子邮件商务往来存 在许多不安全因素,特别是对于一些大公司和一些机密文件在网络上传 输。而且这种不安全性是互联网存在基础TCP/IP 协议所固有的,包 括一些基于 TCP/IP 的服务;另一方面,互联网给众多的商家带来了无限 的商机,互联网把全世界连在了一起,走向互联网就意味着走向了世界, 这对于无数商家无疑是梦寐以求的好事,特别是对于中小企业。 为了解决这一对矛盾、为了能在安全的基础上大开这通向世界之门, 我们

21、只好选择了数据加密和基于加密技术的数字签名。加密在网络上的 7 作用就是防止有用或私有化信息在网络上被拦截和窃取。一个简单的例 子就是密码的传输,计算机密码极为重要,许多安全防护体系是基于密码 的,密码的泄露在某种意义上来讲意味着其安全体系的全面崩溃。通过网 络进行登录时,所键入的密码以明文的形式被传输到服务器,而网络上的 窃听是一件极为容易的事情,所以很有可能黑客会窃取得用户的密码,如 果用户是 Root 用户或 Administrator 用户,那后果将是极为严重的。还有 如果你公司在进行着某个招标项目的投标工作,工作人员通过电子邮件 的方式把他们单位的标书发给招标单位,如果此时有另一位竞

22、争对手从 网络上窃取到你公司的标书,从中知道你公司投标的标的,那后果将是怎 样,相信不用多说聪明的你也明白。这样的例子实在是太多了,解决上述 难题的方案就是加密,加密后的口令即使被黑客获得也是不可读的,加密 后的标书没有收件人的私钥也就无法解开,标书成为一大堆无任何实际 意义的乱码。 总之无论是单位还是个人在某种意义上来说加密也成为当今网络社 会进行文件或邮件安全传输的时代象征! 数字签名就是基于加密技术 的,它的作用就是用来确定用户是否是真实的。应用最多的还是电子邮件, 如当用户收到一封电子邮件时,邮件上面标有发信人的姓名和信箱地址, 很多人可能会简单地认为发信人就是信上说明的那个人,但实际

23、上伪造 一封电子邮件对于一个通常人来说是极为容易的事。在这种情况下,就要 用到加密技术基础上的数字签名,用它来确认发信人身份的真实性。类似 数字签名技术的还有一种身份认证技术,有些站点提供入站 FTP 和 WWW 服务,当然用户通常接触的这类服务是匿名服务,用户的权力要 受到限制,但也有的这类服务不是匿名的,如某公司为了信息交流提供用 户的合作伙伴非匿名的 FTP 服务,或开发小组把他们的 Web 网页上载到 用户的 WWW 服务器上,现在的问题就是,用户如何确定正在访问用户 的服务器的人就是用户认为的那个人,身份认证技术就是一个好的解决 方案。在这里需要强调一点的就是,文件加密其实不只用于电

24、子邮件或网 络上的文件传输,其实也可应用静态的文件保护,如 PIP 软件就可以对磁 盘、硬盘中的文件或文件夹进行加密,以防他人窃取其中的信息。 8 2.2.3 密码学简介 概念发送者和接收者:假设发送者想发送消息给接收者,且想安全地 发送信息:她想确信偷听者不能阅读发送的消息。消息和加密:消息被称 为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的 消息称为密文,而把密文转变为明文的过程称为解密。明文用 M(消息) 或 P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数 字化的视频图像)。至于涉及到计算机,P 是简单的二进制数据。明文可被 传送或存储,无论在哪种情

25、况,M 指待加密的消息。密文用 C 表示,它也 是二进制数据,有时和 M 一样大,有时稍大(通过压缩和加密的结合,C 有可能比 P 小些。然而,单单加密通常达不到这一点)。 加密函数 E 作用于 M 得到密文 C,用数学表示为:E(M)=C.相反地, 解密函数 D 作用于 C 产生 M D(C)=M.先加密后再解密消息,原始的明 文将恢复出来,下面的等式必须成立:D(E(M)=M(3) 鉴别、完整性和抗 抵赖除了提供机密性外,密码学通常有其它的作用: (1) 鉴别消息的接收者应该能够确认消息的来源;入侵者不可能伪装 成他人。 (2) 完整性检验消息的接收者应该能够验证在传送过程中消息没有 被修

26、改;入侵者不可能用假消息代替合法消息。 (3) 抗抵赖发送者事后不可能虚假地否认他发送的消息。 (4) 算法和密钥密码算法也叫密码,是用于加密和解密的数学函数。 (通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)如果 算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。 受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远 不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开 这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了 这个秘密,所有人都必须改变他们的算法。更糟的是,受限制的密码算法 不可能进行质量控制或标准化。每个用户组织必须有他

27、们自己的唯一算 法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到 这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如 果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安 9 全的算法。 尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流 行的,用户或者没有认识到或者不在乎他们系统中内在的问题。现代密码 学用密钥解决了这个问题,密钥用 K 表示。K 可以是很多数值里的任意 值。密钥 K 的可能值的范围叫做密钥空间。加密和解密运算都使用这个 密钥(即运算都依赖于密钥,并用 K 作为下标表示),这样,加/解密函数 现在变成:EK(M)=CDK(C)=

28、M. 这些函数具有下面的特性: DK(EK(M) =M.有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥 K1 与 相应的解密密钥 K2 不同,在这种情况下:EK1(M)=C DK2(C)=M DK2 (EK1(M)=M 所有这些算法的安全性都基于密钥的安全性;而不是基于算 法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量 生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知 道你使用的具体密钥,他就不可能阅读你的消息。密码系统由算法、以及 所有可能的明文、密文和密钥组成的。 2.2.4 算法的安全性 一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性

29、。 对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明 文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他 就不可解读这些数据。但是,软件的加密不同于数据的加密,它只能是 “隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软 件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然 机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这 些明文。于是,从理论上,任何软件加密技术都可以破解。只是破解的难 度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹 灰之力,就被破解了。所以,反盗版的任

30、务(技术上的反盗版,而非行政上 的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成 本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意 义谁会花比正版软件更多的钱去买盗版软件 ?在 DES 中,初始置 换 IP 和逆初始置换 IP-1 各使用一次,使用这两个置换的目的是为了把数 10 据彻底的打乱重新排列,他们对数据加密所起的作用不大,因为他们与密 匙无关,置换关系固定,所以一旦公开,他们对数据加密便无多大价值。 在 DES 中除了 S 盒是非线性变换外,其余变化均是线性变换,因此 S 盒 是 DES 算法的关键,可以看出,任意改变 S 盒中输入的

31、几位,其输出至 少有两位发生变化,由于 DES 中使用了 16 次迭代,所以即使改变明文或 密匙的一位,密文中大约有 32 位发生变化。S 盒的设计一直没有完全公 开,人们怀疑 S 盒的设计可能隐藏着某种陷门,它可以使了解陷门的人 能够成功的进行密码分析。经过多年来的研究,人们的确发现了 S 盒的 很多规律,但至今还没有发现 S 盒的致命缺陷。 3 DES 算法描述 3.1 DES 算法框图 DES 对 64(bit)位的明文分组 M 进行操作,M 经过一个初始置换 IP 11 置换成 m0,将 m0 明文分成左半部分和右半部分 m0=(L0,R0),各 32 位 长。然后进行 16 轮完全相

32、同的运算,这些运算被称为函数 f,在运算过程 中数据与密匙结合。经过 16 轮后,左,右半部分合在一起经过一个末置 换。 在每一轮中,密匙位移位,然后再从密匙的 56 位中选出 48 位。通过 一个扩展置换将数据的右半部分扩展成 48 位,并通过一个异或操作替代 成新的 32 位数据,在将其置换换一次。这四步运算构成了函数 f。然后, 通过另一个异或运算,函数 f 的输出与左半部分结合,其结果成为新的右 半部分,原来的右半部分成为新的左半部分。将该操作重复 16 次,就实 现了。具体如图 2-1 所示: 12 图 2-1 DES 算法框图 3.2 DES 解密 加密和解密使用相同的算法。 DE

33、S 加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙 分别是 K1,K2,K3.K16 那么解密密匙就是 K16,K15,K14K1。 3.3 算法流程 DES 算法把 64 位的明文输入块变为 64 位的密文输出块,它所使用 的密钥也是 64 位,整个算法的主流程图如下:其功能是把输入的 64 位数 据块按位重新组合,并把输出分为 L0、R0 两部分,每部分各长 32 位,其 置换规则见下表: 58,50,12,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,

34、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, 即将输入的第 58 位换到第一位,第 50 位换到第 2 位,.,依此类推, 最后一位是原来的第 7 位。L0、R0 则是换位输出后的两部分,L0 是输出 的左 32 位,R0 是右 32 位,例:设置换前的输入值为 D1D2D3D64,则 经过初始置换后的结果为:L0=D58D50.D8;R0=D57D49.D7。经过 26 次迭代运算后。得到 L16、R16,将此作为输入,进行逆置换,即得到密文 输出。逆置换正

35、好是初始置的逆运算,例如,第 1 位经过初始置换后,处 于第 40 位,而通过逆置换,又将第 40 位换回到第 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, 放大换位表: 32, 1 , 2 , 3 , 4 , 5 , 4 , 5 ,

36、 6 , 7 , 8 , 9 , 8 , 9 , 10,11, 13 12,13,12,13,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, 单纯换位表: 16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 2, 8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25, 在 f(Ri,Ki)算法描述图中,S1,S2.S8 为选择函数,其功能是把 6bit 数 据变为 4bit 数据。下面给出选择函

37、数 Si(i=1,28)的功能表:选择函数 Si S1: 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,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,

38、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,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,1

39、1,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,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, 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,

40、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, S7: 4,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

41、,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,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)的 生成算法。从子密钥

42、 Ki 的生成算法描述图中我们可以看到:初始 Key 值 为 64 位,但 DES 算法规定,其中第 8、16、64 位是奇偶校验位,不参 与 DES 运算。故 Key 实际可用位数便只有 56 位。即:经过缩小选择换位 表 1 的变换后,Key 的位数由 64 位变成了 56 位,此 56 位分为 C0、D0 两部分,各 28 位,然后分别进行第 1 次循环左移,得到 C1、D1,将 C1(28 位)、D1(28 位)合并得到 56 位,再经过缩小选择换位 2,从而便得到了密 钥 K0(48 位)。依此类推,便可得到 K1、K2、K15,不过需要注意的 是,16 次循环左移对应的左移位数要依

43、据下述规则进行:循环左移位数 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 以上介绍了 DES 算法的加密过程。DES 算法 的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥 K15,第二 15 次 K14、,最后一次用 K0,算法本身并没有任何变化。 4 算法算法实现实现及及应应用用 4.1 应用程序结构 程序总体功能有加密演示,解密演示,加密过程三个部分,同时提供对 密匙的简单管理,用户可根据需要自行修改密匙设置。程序上各个功能模 块的执行依赖于界面事件,程序采用 Visual C+实现,充分利用了 Visual C+的事件模型.事件驱动的原理是注册监视器,为对象添加

44、监视器,捕获 事件,分析事件原因以及类型,根据事件的不同,执行不同的功能代码.本程 序根据用户执行的操作,程序捕获界面上发生的事件,再根据事件的类型, 执行不同的功能函数。 4.2 加密算法 VC+实现 通过前面章节对 DES 算法的介绍,用 VC+开发设计 DES 加密算法, 其主要实现代码如下: for(i=1;i=64;i+) m1i=mipi-1;/64 位明文串输入,经过 IP 置 换。 16 下面进行迭代。由于各次迭代的方法相同只是输入输出不同,因此只 给出其中一次。以第八次为例: /进行第八次迭代。首先进行 S 盒的运算,输入 32 位比特串。 for(i=1;i=48;i+)/

45、经过 E 变换扩充,由 32 位变为 48 位 RE1i=R7Ei-1; for(i=1;i=48;i+)/与 K8 按位作不进位加法运算 RE1i=RE1i+K8i; for(i=1;i=48;i+) if(RE1i=2) RE1i=0; for(i=1;i7;i+)/48 位分成 8 组 s11i=RE1i; s21i=RE1i+6; s31i=RE1i+12; s41i=RE1i+18; s51i=RE1i+24; s61i=RE1i+30; s71i=RE1i+36; s81i=RE1i+42; /下面经过 S 盒,得到 8 个数。S1,s2,s3,s4,s5,s6,s7,s8 分别为

46、 S 表 s1=s1s116+s111*2s115+s114*2+s113*4+s112*8; s2=s2s216+s211*2s215+s214*2+s213*4+s212*8; s3=s3s316+s311*2s315+s314*2+s313*4+s312*8; s4=s4s416+s411*2s415+s414*2+s413*4+s412*8; s5=s5s516+s511*2s515+s514*2+s513*4+s512*8; s6=s6s616+s611*2s615+s614*2+s613*4+s612*8; s7=s7s716+s711*2s715+s714*2+s713*4+s7

47、12*8; s8=s8s816+s811*2s815+s814*2+s813*4+s812*8; 17 for(i=0;i8;i+)/8 个数变换输出二进制 for(j=1;j5;j+) tempj=si+1%2; si+1=si+1/2; for(j=1;j5;j+) f4*i+j=temp5-j; for(i=1;i33;i+)/经过 P 变换 frki=fPi-1;/S 盒运算完成 for(i=1;i33;i+)/左右交换 L8i=R7i; for(i=1;i33;i+)/R8 为 L7 与 f(R,K)进行不进位二进制加法运算 结果 R8i=L7i+frki; if(R8i=2) R8

48、i=0; 生成子密钥的 VC 程序源代码如下: for(i=1;i57;i+)/输入 64 位 K,经过 PC-1 变为 56 位 k0i =kPC_1i-1; 56 位的 K0,均分为 28 位的 C0,D0。C0,D0 生成 K1 和 C1,D1。以 下几次迭代方法相同,仅以生成 K8 为例。 for(i=1;i27;i+)/循环左移两位 C8i=C7i+2; D8i=D7i+2; 18 C827=C71; D827=D71; C828=C72; D828=D72; for(i=1;i=28;i+) Ci=C8i; Ci+28=D8i; for(i=1;i=48;i+) K8i=CPC_2i-1;/生成子密钥 k8 4.3 应用程序功能模块定义 本应用程序为 DES 算法加解密演示程序,主要功能是提供一个加解 密演示的效果,在输入框中输入明文和密钥,点击加密便可进行加密,并 在右侧窗口显示加密的全过程,提供明文与密文的二进制显示。为体现 DES 算法的可逆

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1