系统软件综合课程设计报告AES加密算法的设计与实现

上传人:仙*** 文档编号:27770408 上传时间:2021-08-20 格式:DOC 页数:42 大小:957.52KB
收藏 版权申诉 举报 下载
系统软件综合课程设计报告AES加密算法的设计与实现_第1页
第1页 / 共42页
系统软件综合课程设计报告AES加密算法的设计与实现_第2页
第2页 / 共42页
系统软件综合课程设计报告AES加密算法的设计与实现_第3页
第3页 / 共42页
资源描述:

《系统软件综合课程设计报告AES加密算法的设计与实现》由会员分享,可在线阅读,更多相关《系统软件综合课程设计报告AES加密算法的设计与实现(42页珍藏版)》请在装配图网上搜索。

1、XXXXXXX大学 计算机科学与工程学院综合设计报告设计名称: 系统软件设计 设计题目: AES加密算法的设计与实现 学生学号: XXXXXXX 专业班级: XXXXXXXXXXXXXX 学生姓名: XXXXX 学生成绩: 指导教师(职称): 课题工作时间: 2010-12-27 至 2011-1-5 说明:1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设计完成情况、报告的质量及答辩情况,给出

2、客观、全面的评价。4、所有学生必须参加综合设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。5、报告正文字数一般应不少于5000字,也可由指导教师根据本门综合设计的情况另行规定。6、平时表现成绩低于6分的学生,其综合设计成绩按不及格处理。7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适用于学院各类综合设计),各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。成绩评定表学生姓名: XXXX 学号: XXXXXXXX 班级: XXXXXXXXX 类别合计分值各项分值评分标准实际得分合计得分备注平时表现1010按时参加综合设

3、计,无旷课、迟到、早退、违反实验室纪律等情况。完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。10能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。报告质量3510报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具有说服力。5符号统一;图表完备、符合规范要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。5参考文献数量在3篇以上,格式符合要求,在正文中正确引用。答辩情况2510在规定时间内能

4、就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。总评成绩: 分 补充说明: 指导教师: (签字)日 期: 年 月 日答辩记录表学生姓名: XXXX 学号: XXXXXX 班级: XXXXXXXXXX 答辩地点: 答辩内容记录:答辩成绩合计分值各项分值评分标准实际得分合计得分备注2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。答辩小组成员(签字): 年 月 日指导教师评语指导教师: (签字)日 期: 年 月 日一、综合设计目的、

5、条件、任务和内容要求:综合设计目的:1、为了考察大家对于加密与解密、C+语言、数据结构与算法等课程的学习情况。2、为了让大家能够更好的掌握所学的知识,能够熟练运用。3、体验一下运用所学知识做出能够实际应用的成果,更好的为将来的就业服务。综合设计条件:1、学生已经修完(必修、选修或者自学)C+语言基础面向对象升序设计数据结构与算法(基于C+语言)密码学以及大学数学基础课程。 2、能够拥有在32位及以上操作系统平台上稳定运行的Microsoft Visual C+ 6.0 或者Microsoft Visual C+ 2005以及Microsoft Visual FoxPro 6.0等编程程序的计算

6、机专业机房。 3、有固定的时间段(一般是两个周)供学生相互探讨,完成设计以及设计报告。综合设计任务和内容要求:1、学生以自由选题的方式从所提供题库中选择所设计的题目。2、学生拿到题目以后,进行登记确认签字留教务处备案。3、设计课题拿到以后在规定的时间内完成并且提交综合设计报告,综合设计报告要按统一的格式填写,在规定的时间有指定的老师进行答疑。4、在综合设计过程中要严谨求实,力争创新,查阅多方面资料,多与同学探讨,向导师请教,争取将综合设计的课题完整,高效,高质量的完成。 指导教师签字: 年 月 日二、进度安排:1、2010年12月27日正式拿到课题,并且登记,签字确认。并且确定将要使用的编程语

7、言类型以及操作平台。2、2010年12月27日2010年12月27日,上机时间熟悉编程语言,并且开始逐步拟定程序框架,开始试编部分小函数;其余时间通过网络、图书馆等查阅相关资料。3、2010年12月28日2010年12月30日,基本完成主体程序的编写。4、2010年12月30日2011年1月4日,开始调试和试运行程序,发现错误,并进行更改,至4日下午,可以正常运行程序,并且能够达到要求。5、2011年1月5日,全面检测程序,并且进行完善,提高,正式完成综合设计代码部分的编写。6、2011年1月6日,撰写综合设计报告。7、2011年1月7日,答辩,上交设计报告。三、应收集资料及主要参考文献:1

8、张晓新,仲丛久.基于C语言实现的数据加密DES算法J.沈阳航空工业学院学报.2004,21(2):48-49.2 李海泉,李健.计算机网络安全与加密技术M.科学出版社.2001.3 胡长年.DES加密技术及VC的程序实现J.化工时刊.2004,18(8):54-554 DES加密算法OL.htm.2005-1-10/2005-4-21.5 徐丽娜.数据加密标准算法DESJ.辽宁省交通高等专科学校学报.2000,2(3):16-19.6 斯托林斯(美).密码学与网络安全:原理与实践(影印本)M.清华大学出版社,2002年6月第二版.7 王化文等.计算机安全保密原理与技术M.科学出版社,19938

9、 卢开澄.计算机密码学:计算机网络中的数据保密与安全M.清华大学出版社.2000年12月第三版.9 黄庆生,汤毅,戴宁.精通Visual C6.0.人民邮电出版社M.1999年6月.四、综合设计(课程设计)摘要(中文):随着现代密码分析水平、芯片处理能力和计算技术的不断进步,高级加密标准AES的Rijndael算法将在各行业各部门获得广泛的应用,成为虚拟专用网、SONET、远程访问服务器、高速ATM/以太路由器、移动通信、卫星通信、电子金融业务等的加密算法,并逐渐取代DES在IPSec、SSL和ATM中的加密功能。目前,IEEE 802.11i草案已经定义了AES加密的两种不同运行模式,成功解

10、决了无限局域网标准中的诸多安全问题。在这种情形下,AES算法的安全性及其快速实现问题显得格外突出,本文对此进行了全面的论述,希望能为有意进行这一方面研究和应用的同行提供有益的参考。文章阐述了Rijndael算法的设计特色,介绍了AES在密码分析方面国内外已有的一些理论分析成果,描述了AES算法采用软件和硬件实现方案。此外,本文章从数学基础的知识上阐明了AES算法的四个步骤。从AES算法抵抗强力攻击能力,抵抗差分分析和线性密码分析的能力,抵抗渗透攻击能力,抵抗代数计算攻击能力,抵抗XSL攻击能力,弱密钥的分析这几个方面进行了分析从而说明AES的安全性能。我们根据算法的安全性、代价以及算法与实现特

11、性的原则实现了AES的算法,从密钥编排方案分析了密钥的设计准则和选取。五、综合设计(课程设计)Abstract(英文):AbstractWith the modern code of the level of analysis, processing power and chip technology advances ,AES Rijndael algorithm in various industries and departments to obtain a wide range of applications, virtual private networks become, SONE

12、T, remote access servers, high-speed ATM / Ethernet routers, mobile communications, satellite communications, electronic financial services such as encryption algorithm, And gradually replaced by DES in IPSec, SSL and encryption in the ATM. At present, IEEE 802.11i draft definition of the AES encryp

13、tion has two different modes of operation, the successful resolution of an unlimited number of local area network standard of safety. In this case, AES algorithm for the safety of its rapid realization of the problem is particularly prominent in this article have conducted a thorough discussion in t

14、he hope of intention to conduct the study and application of peer-to provide a useful reference. The article describes the design characteristics of the Rijndael algorithm, introduced at the AES code analysis at home and abroad have been some of the theoretical analysis of the results of the AES alg

15、orithm used to describe software and hardware to achieve fast program. In addition, the article from the mathematical knowledge-based AES algorithm on a set of four steps. AES algorithm resistance from powerful attack capability against differential cryptanalysis and linear analysis of the ability t

16、o resist infiltration attack capability, the ability to resist attacks on calculate algebra, the ability to resist attacks XSL, weak analysis of these key aspects of the analysis that in order to AES Safety performance. According to the security of our algorithm, as well as the cost of algorithm and

17、 implementation of the principle characteristics of the realization of the AES algorithm. From the analysis of the key programs scheduled for the key criteria for the design and selection.XXXXXXX大学计算机科学与工程学院 综合设计报告目 录(以下章节名称为参考)摘 要 IIAbstract . II第一章 绪论. 11.1 课题目的和意义 .11.2 AES算法理论依据 . 11.3 AES主要工作内容

18、.2第二章AES简介及算法设计方案. .32.1 AES算法简介 .3 2.2 AES算法方案 .32.3 AES算法的应用 .4 第三章AES设计实现.53.1 AES算法系统.5 3.2 AES实现过程分析.6 3.3 C+设计实现.8第四章设计结果及安全性分析. 114.1 设计结果 .11 4.2 AES的破解思考 .13 4.3 AES抗击渗透攻击能力分析 .14 总 结 .15致 谢 .16参考文献 .17 附录 主要程序代码 .18摘 要随着现代密码分析水平、芯片处理能力和计算技术的不断进步,高级加密标准AES的Rijndael算法将在各行业各部门获得广泛的应用,成为虚拟专用网、

19、SONET、远程访问服务器、高速ATM/以太路由器、移动通信、卫星通信、电子金融业务等的加密算法,并逐渐取代DES在IPSec、SSL和ATM中的加密功能。目前,IEEE 802.11i草案已经定义了AES加密的两种不同运行模式,成功解决了无限局域网标准中的诸多安全问题。在这种情形下,AES算法的安全性及其快速实现问题显得格外突出,本文对此进行了全面的论述,希望能为有意进行这一方面研究和应用的同行提供有益的参考。文章阐述了Rijndael算法的设计特色,介绍了AES在密码分析方面国内外已有的一些理论分析成果,描述了AES算法采用软件和硬件实现方案。此外,本文章从数学基础的知识上阐明了AES算法

20、的四个步骤。从AES算法抵抗强力攻击能力,抵抗差分分析和线性密码分析的能力,抵抗渗透攻击能力,抵抗代数计算攻击能力,抵抗XSL攻击能力,弱密钥的分析这几个方面进行了分析从而说明AES的安全性能。我们根据算法的安全性、代价以及算法与实现特性的原则实现了AES的算法,从密钥编排方案分析了密钥的设计准则和选取。关键词:AES算法;加密;解密;安全性能分析AbstractWith the modern code of the level of analysis, processing power and chip technology advances ,AES Rijndael algorithm

21、in various industries and departments to obtain a wide range of applications, virtual private networks become, SONET, remote access servers, high-speed ATM / Ethernet routers, mobile communications, satellite communications, electronic financial services such as encryption algorithm, And gradually r

22、eplaced by DES in IPSec, SSL and encryption in the ATM. At present, IEEE 802.11i draft definition of the AES encryption has two different modes of operation, the successful resolution of an unlimited number of local area network standard of safety. In this case, AES algorithm for the safety of its r

23、apid realization of the problem is particularly prominent in this article have conducted a thorough discussion in the hope of intention to conduct the study and application of peer-to provide a useful reference. The article describes the design characteristics of the Rijndael algorithm, introduced a

24、t the AES code analysis at home and abroad have been some of the theoretical analysis of the results of the AES algorithm used to describe software and hardware to achieve fast program. In addition, the article from the mathematical knowledge-based AES algorithm on a set of four steps. AES algorithm

25、 resistance from powerful attack capability against differential cryptanalysis and linear analysis of the ability to resist infiltration attack capability, the ability to resist attacks on calculate algebra, the ability to resist attacks XSL, weak analysis of these key aspects of the analysis that i

26、n order to AES Safety performance. According to the security of our algorithm, as well as the cost of algorithm and implementation of the principle characteristics of the realization of the AES algorithm. From the analysis of the key programs scheduled for the key criteria for the design and selecti

27、on.Keywords:AES algorithm; Encryption; Decrypt; Safety Performance Analysis- 29 -第一章 概述网络的发展使计算机深入到了各行各业的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提高, 计算机保密系统已变得越来越重要,密码学应用不再是局限于军事、国防等有限领域,而是迅速的走进了千家万户。以及各个大中小型企业,随着人们对于个人隐私信息以及特别是企业隐私信息的注重,其应用十分广泛。1.1 课题目的以及意义本次的课题以AES加密算法的设计并

28、在C+平台实现为目的,为了能够更好的锻炼自己的加密算法的掌握程度,并且能够充分的运用大学期间所学习的C+程序设计基础。适当的对所学知识进行扩展,希望能够在整个的课题设计工作中,充分掌握对于加密算法的实际运用,并且锻炼实际算法设计操作的能力,提高书本之外的课题实践经验。AES加密算法以充分的数学理论知识为功底,以熟练的C+程序设计的技术为手段,综合要求较高,能够充分考验和考察自己的动手能力以及综合运用能力,提高设计经验,增加信息安全性感知上有很大的帮助。以此次的AES加密算法的设计为前导,希望能够在锻炼能力和经验的基础上为以后的毕业设计做铺垫。AES加密算法对于信息安全专业的学生有很高的运用考验

29、,对于算法的数学基础需要有较高要求,需要对于大学数学做必要的复习熟悉,对于以前所学知识的深层次的掌握将是一个很好的契机。同时,对于即将参加工作的自己也是一个很好的增加实践经验的机会。1.2 AES加密算法的理论依据Rijndael算法设计采用针对差分和线性密码分析提出的宽轨迹策略(WTS),其最大优势是可以给出算法最佳差分特征的概率以及最佳线性逼近偏差的界;使用简单的部件组织成清晰的结构,便于算法安全性的分析。当然,在密码学界永远没有绝对的安全,Rijndael算法也不例外,如其明显的代数结构对安全性的潜在威胁已经受到一些学者的质疑。最有名的当数密码设计者自己提出的Square攻击,其主要思想

30、是利用第4轮字节替换前后平衡性的改变来猜测密钥字节,对128比特密钥下4到6轮简化算法有效。Biham2等对Square攻击进行改进,时间复杂度降为原来的一半,并认为颠倒轮密钥的顺序可将攻击复杂度降低28。Lucks3利用密钥生成算法的弱点,将Square攻击的密钥长度扩展到192和256比特,攻击7轮简化算法比穷尽搜索快。Ferguson4利用“部分和”技术将6轮Square攻击的复杂度从272降到244,并推广到7轮和8轮简化算法,指出密钥生成算法中几个违背设计准则的特性,利用慢扩散性设计了一个针对256比特密钥下9轮简化算法的密钥相关攻击方案。密码代数结构的任何弱点都将有利于密码的分析和

31、破译。因此,在对Rijndael简化算法进行攻击尝试的同时,人们也把相当多的精力集中到算法内部结构各种性质的研究上。Ferguson8给出了Rijndael算法一个直观而紧凑的代数表示形式;Filiol9则将算法的每一输出比特看作以明文比特和密钥比特为变量的布尔函数,用Mbius变换将之计算出来,研究其低次项的分布情况,比较与完全随机的布尔函数代数正规式的差异。1.3 AES加密算法设计的主要工作内容GF()中乘法使用的多项式是8次不可约多项式列表中的第一个多项式。ByteSubstitution(称为S盒)在设计时考虑到抵抗差分密码分析、线性密码分析的要求,应满足以下条件:(1) 可逆性;

32、(2) 输入比特的线性组合与输出比特的组合之间的最大非平凡相关性的极小化;(3) 异或差分表中最大非平凡值的极小化;(4) GF()中代数表示的复杂性; (5) 描述的简单性。满足前3条准则的S盒的构造方法已被给出,AES的作者从众多候选构造中选择将x映射到它的逆的S盒。该映射过于简单,为了抵抗插入攻击,加入仿射变换:模数多项式选择为可能是最简单的模数多项式。可以找到其它的S盒满足以上准则。MixColumn变换符合以下准则: (1) 可逆性; (2) GF()中的线性性; (3) 适当的扩散性能;(4) 8位处理器上实现速度快;(5) 对称性;(6) 描述的简单性。选择模数多项式可满足准则2

33、、5、6。准则1、3、4要求系数的值要小,故选00、01、02 、 03。ByteRotation符合以下准则:(1) 4个位移量互不相同且;(2) 能抵抗差分截断攻击;(3) 能抗Square攻击; (4) 简单。从满足准则2和准则3出发,AES的作者选取了最简单的组合。第二章 AES简介及算法设计方案2.1 AES算法简介随着对称密码的发展,3DES用软件实现速度相对较慢,它使用的64位分组长度显得不够高效和安全的缺点使得需要一种新的高级加密标准来替代它。AES的全称是 Advanced Encryption Standard,即高级加密标准。该项目由美国国家标准技术研究所 (NIST)于

34、1997年开始启动并征集算法,在2000年确定采用Rijndael作为其最终算法,并于 2001年被美国商务部部长批准为新的联邦信息加密标准 (FIPS PUB 197),该标准的正式生效日期是2002年5月26日。2000年10月2日,NIST对Rijndael做 出了最终评估。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)

35、和替换(substitutions)输入数据。2.2 AES算法的方案AES加密算法主要分为三大块9,即密钥扩展,数据加密和数据解密。(一)密钥扩展(1)使用Rotword()函数对数组中的数字实现循环左移一位的运算,即将数组中左端第一个数字移至数组的末端,而原来在它之后的数字依次前移一位。要说明的是,由于数组中的4个数字已经合并为一个数字,因此在程序的实际执行过程中并不是做数组的循环左移运算,而是进行数字的循环移位运算,这样一来便大大简化了运算过程,对运算效率有一定程度的提高。(2)使用SubWord()函数依据S置换表对4个数字进行置换,规则如下。例如,有一个数字为0x2a,则在表11中查

36、找2行a列的数字,得到数字e5,则该数字即是数字0x2a 的置换数字。此函数的C语言实现相对简单,只是一个查表的问题,但过程比较繁琐细碎,编成时应仔细对待,避免出错。(二)数据加密(1)使用SubByte()函数依据S置换表对状态矩阵State44中的数字进行置换,查表的方法在前文已经介绍,这里不再赘述。有一点需要注意的是,虽然SubByte()函数与SubWord()函数原理相同,但在程序中的运算过程却不尽相同。SubByte()函数是提取状态矩阵State44中的每一个数组元素进行置换运算,而SubWord()则是提取一unsigned long 整型数字中的某8位数据进行置换运算。Sub

37、Byte()函数的C语言实现与SubWord()的C语言实现雷同,这里也不再赘述。(2)使用ShiftRow()函数对状态矩阵State44 中的各行数据进行循环移位运算。该函数所进行的循环移位规则如下。状态矩阵State44 中的第一行数据位置不变,第二行数据循环左移一位数字,第三行数据循环左移两位数字,第四行数据循环左移三位数字。在对ShiftRow()函数进行C语言编程时主要是要注意行数以及所对应的移位个数,保证运算的准确性。(三)数据解密(1)使用InvSubByte()函数依据S置换表的逆表对状态矩阵State44中的数字进行置换,置换方法与SubByte()函数相同。该函数的C语言

38、实现与SubByte()函数基本相同,在此不再赘述。(2)使用InvShiftRow()函数对状态矩阵State44 中的各行数据进行循环移位运算。该函数所进行的循环移位规则如下。状态矩阵State44 中的第一行数据位置不变,第二行数据循环右移一位数字,第三行数据循环右移两位数字,第四行数据循环右移三位数字。2.3 算法的应用当一组数据向闪存盘内写入时,对数据流进行实时加密,即输入闪存盘内的以密的形式存储于盘内;当对盘中的数据进行读取时,通过加密算法对输出的密文进行实时解密,即输出的数据为解密后的原文。计算机中所有类型的文件都是以01数字的形式进行存储的,文件的输入和输出过程实际上就是数据流

39、的输入与输出,只要实现了数据流的加密,便可以实现对任意形式文件的加密。因此,通过AES加密算法完成数据流的加密和解密具有实际的应用价值和意义。目前尚未出现对完整Rijndael算法的成功攻击,只提出了几种针对简化算法的攻击方法。最有名的当数密码设计者自己提出的Square攻击,其主要思想是利用第4轮字节替换前后平衡性的改变来猜测密钥字节,对128比特密钥下4到6轮简化算法有效。Biham2等对Square攻击进行改进,时间复杂度降为原来的一半,并认为颠倒轮密钥的顺序可将攻击复杂度降低28。Lucks3利用密钥生成算法的弱点,将Square攻击的密钥长度扩展到192和256比特,攻击7轮简化算法

40、比穷尽搜索快。Ferguson4利用“部分和”技术将6轮Square攻击的复杂度从272降到244,并推广到7轮和8轮简化算法,指出密钥生成算法中几个违背设计准则的特性,利用慢扩散性设计了一个针对256比特密钥下9轮简化算法的密钥相关攻击方案。Gilbert5利用局部函数间的冲突特性对4到7轮简化算法进行了攻击。Cheon等将5轮不可能差分攻击推广到6轮,复杂度高于相应的Square攻击,但仍快于密钥穷尽搜索。Koeune6描述了一种计时攻击,通过对每个密钥数千次的测量,展现攻破一个不良的现实设计的过程。Golic7则指出AES算法虽然能够通过乘法掩盖来抵抗简单能量攻击(SPA),对差分能量攻

41、击(DPA)却无能为力。第三章AES设计实现3.1 AES算法系统AES不但具有良好的安全性,但而且适合在多种处理器办软件编程上方便快捷的实现。本文是基于32位操作系统下,用Visual C+ 软件开放了一个界面友好的MFC平台。下面介绍AES的典型软件实现的主要方法和遇到的问题。3.1.1程序功能介绍本程序分为两部分,一部分是字符串加密解密,另一部份是文本加密解密。字符串加密部分,可以选择密钥长度:分别为128 、192、256 比特,并且可以自己设置密码。然后只要在待加密的字符串窗口中输入要加密的字符串,就可以相应的进行加密解密。文本加密部分能够入*.txt格式的文本,然后按128比特每组

42、分组进行加密,再保存为*.txt.en文本,以和原来文本区分;解密时即需要导入以*.txt.en为后缀的文本,解密后保存为*.txt.en.de文本。3.2 AES实现过程分析Rijndael使用的是置换-组合架构,而非Feistel架构。AES 是一个新的可以用于保护电子数据的加密算法。AES 算法是基于置换和代替的,置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES 使用了几种不同的技术来实现置换和替换。AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥

43、密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。3.2.1加密处理加密过程:图3-1加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:1) SubBytes 透过一个非线性的替换函数,用查找表的方2) ShiftRows 将矩阵中的每个横列进行循环式移位。3) MixColumns 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每行内的四个字节。4) AddRoundKey 矩阵中的每一个字节都与该次循环的子密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。最后一个加密循环中省略MixColumns步骤,而以另一个A

44、ddRoundKey取代。图3-2SubBytes 步骤在SubBytes步骤中,矩阵中各字节被固定的8位查找表中对应的特定字节所替换,S; bij = S(aij).如图所示:图3-3ShiftRows 步骤在ShiftRows 步骤中,矩阵中每一列的各个字节循环向左方位移。位移量则随行数递增而递增。在ShiftRows 步骤中,矩阵中每一列的各个字节循环向左方位移。位移量则随着行数递增而递增。图3-4MixColumns 步驟在 MixColumns 步骤中,每个直行都在modulo x4 + 1之下,和一个固定多项式c(x) 作乘法图3-5AddRoundKey步骤子密钥将会与原矩阵合并

45、。在每次的加密循环中,都会由主密钥产生一把子密钥(透过Rijndael密钥生成方案产生),这把子密钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或()加法。y 步骤类推继续,完成10轮循环:图3-63.2.2 AES密钥调度密钥调度包括两个部分:密钥扩展和轮密钥选取。密钥bit的总数分组长度(轮数Round1)例如当分组长度为128bits和轮数Round为10时,轮密钥长度为128(101)1408bits。图3-7将密码密钥扩展成一个扩展密钥。类推,经过10轮计算,得到如下轮密钥调度表:图3-8从扩展密钥中取出轮密钥:第一个轮密钥由扩展密钥的第一个Nb个4字节字,第二个圈密钥由接下来

46、的Nb个4字节字组成,以此类推。3.3 C+设计实现对AES的C+实现,这里只做加密过程,解密过程是按相反的顺序进行逆变换的加密。cipher是加密和解密时使用的算法。首先对出现在代码中的变量和函数做一下介绍,以便读程序的过程更加方便。3.3.1 声明一个Aes的类功能描述:以面向对象的方式,建立了一个类对象,包含了AES加密过程中要实现各项功能的函数,这样能够清晰的看到整个加密程序的结构,有利于对程序的模块化管理。实现代码:class Aes public:Aes();Aes();Aes(); /构造函数用密钥长度keySize和密钥内容keyBytes作为参数。void Cipher();

47、 / 加密函数,input 为16位为要加密的明文InvCipher(); / 解密函数,input 为16位要解密的密文private:int Nb; int Nk; int Nr; unsigned char key32;unsigned char w16*15;SetNbNkNr(int keySize); /设置轮数AddRoundKey(int round); /轮密钥加SubBytes(); /S盒字节代换InvSubBytes(); /逆S盒字节代换ShiftRows(); /行移位InvShiftRows();MixColumns(); /列混淆InvMixColumns();

48、KeyExpansion(); /密钥扩展unsigned char* SubWord(unsigned char* word); /密钥S盒字代换unsigned char* RotWord(unsigned char* word); /密钥移位成员函数的实现.迭代分组列数、密钥列数、迭代次数设置函数功能描述:因为AES分组长度为128 bits,Nb固定为4。再根据界面密钥长度窗口keySize的选择,判断是密钥是128、192、256比特,然后设置密钥列数Nk,然后可得到Nr。(根据第2章“轮数的确定”一节)实现代码:Aes:SetNbNkNr(int keySize)Nb=4;if(k

49、eySize=Bits128)Nk=4; /4*4字节,128位密钥,10轮加密Nr=10;else if(keySize=Bits192)Nk=6; /6*4字节,192位密钥,12轮加密Nr=12;else if(keySize=Bits256)Nk=8; /8*4字节,256位密钥,14轮加密Nr=14;.构造函数功能描述:实现了设置密钥块数,轮数,并且将设定了密码,和为密钥扩展提前做的初始化。实现代码:Aes:Aes(int keysize,unsigned char* keyBytes)SetNbNkNr(keysize); /设置密钥块数,轮数 memcpy(key,keyByte

50、s,keysize);/字符串拷贝函数,把keyBytes的keysize个字符复制到key中KeyExpansion();/密钥扩展,必须提前做的初始化.轮密钥加功能描述:在每一轮的加密过程实现了将分组的待加密字符串的第一列与一个密钥字进行按位异或。实现代码:Aes:AddRoundKey(int round)int i,j; /i行 j列 /因为密钥w是一列一列排列的,即 k0 k4 k8 k12for(j=0;j4;j+) / k1 k5 k9 k13 / k2 k6 k10k14for(i=0;i4;i+) / k3 k7 k11k15 / 所以i行j列的下标是4*(round*4)+

51、j)+i即16*round+4*j+iStateij=(unsigned char)(int)Stateij(int)w4*(round*4)+j)+i); .行移位函数功能描述:实现了行的循环移位操作,变换方法为:第0行不动,第1行循环左移一个字节,第2行循环左移2个字节,第3行循环左移3个字节。代码实现:Aes:ShiftRows()unsigned char temp4*4; int i,j;for(j=0;j4;j+)for(i=0;i4;i+)temp4*i+j=Stateij;for(i=1;i4;i+)for(j=0;jGetWindowText(Text); /将界面信息关联变

52、量的函数 if (Text=128bits) keysize=16; /选择密钥长度 else if (Text=192bits) keysize=24; else if (Text=256bits) keysize=32; else MessageBox(请选择密钥长度);unsigned char inBuff33,ouBuff33; memset(inBuff,0,33);memset(ouBuff,0,33);unsigned char keykey35 ; GetDlgItemText(IDC_key,( char*)keykey,keysize); Aes aes(keysize,(unsigned char *)keykey); /声明Aes类对象GetDlgItemText(IDC_Input,(char*)inBuff,keysize);if(strlen(char*)inBuff)16)MessageBox(本例只能加密16字节的字符串,大于截断);aes.Cipher(inBuff,ouBuff); / 调用Aes成员函数Cipher进行加密CString str=,strTmp;/实际输出是32个字母或数字,否则ASCII码值超出127的会变成乱码。for(int i=0;i16;i+)strTmp.Format(%02x,ouBuffi

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!