ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:191.21KB ,
资源ID:13603522      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13603522.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(密码学课程方案AES加密解密文档.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

密码学课程方案AES加密解密文档.docx

1、密码学课程方案AES加密解密文档成都信息工程学院课程设计报告AES加密解密的实现课程名称:应用密码算法程序设计学生姓名:学生学号:专业班级:任课教师:年月 日附件:课程设计成绩评价表指导老师评阅成绩表学习与工作态度30%)选题意义10%)文献综述10%)研究水平与设计能力20%)课程设计说明说论文)撰写质量20%)设计创新10%)总分指导老师签名: 年 月 日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分工程分值评价参考标准评分总分优良中及格差选题意义1098764文献综述1098764研究水平与设计能力201917151310课程设计说明书论文)撰写质量20

2、1917151310设计创新1098764答辩效果302825221915答辩小组成员签名答辩小组组长签名: 年 月 日课程设计成绩评定表成绩汇总评分工程评分比例分数课程设计总分指导老师评分50%答辩小组评分50%1 背景AES,密码学中的高级加密标准Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日

3、成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES 有一个固定的128位的块大小和128,192或256位大小的密钥大小。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。Rijdael的发音近于 Rhine doll。)AES在软体及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围.2.系统设计2.1系统主要目标基本要求部分:1在深入理解AES加密/解密算法理论的基础上,设计一个A

4、ES加密/解密软件系统;2完成一个明文分组的加解密,明文和密钥是十六进制,长度都为64比特16个16进制数),输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;3.程序运行时,要求输出每一轮使用的密钥,以及每一轮加密或解密之后的16进制表示的值;4.要求提供所设计系统的报告及完整的软件。较高要求部分:1.如果明文不止一个分组,程序能完成分组,然后加密;最后一个分组长度不足时要求完成填充;密钥长度不足时能进行填充,过长则自动截取前面部分。2.密钥采用ASCII码,明文要求输入信息可以是文字可以是汉字或英文,信息量要求不止一个加密分组长度),任意字符,或者是文本文档,或者普通文件。进行加密

5、后,能够进行正确的解密;3.程序代码有比较好的结构,模块划分合理,如用类进行封装,通过调用类的成员函数实现加密解密功能,函数的参数及返回值设置合理等;4.界面友好,程序实现有新意。 2.2主要软件需求运行环境)本软件适用VC语言编写,编译成功后的EXE文件可以在装有windows系统的任何计算机上使用。测试平台:Windows XP Professional使用软件:Visual C+ 6.02.3功能模块与系统结构主要功能模块如下:1. 字节替换SubByteA0,0A0,1A0,2A0,3A1,0A1,1A1,2A1,3A2,0A2,1A2,2A2,3A3,0A3,1A3,2A3,3B0,

6、0B0,1B0,2B0,3B1,0B1,1B1,2B1,3B2,0B2,1B2,2B2,3B3,0B3,1B3,2B3,32. 行移位ShiftRow3.列混合MixColumn4.轮密钥加AddRoundKey5.逆字节替换 通过逆S盒的映射变换得到6.逆行移位InvShiftRow与加密时的行移位区别在于移位方向相反。7.逆列混淆加密与解密系统流程图如下所示,3 系统功能程序设计3.1基本要求部分3.1.1字节替换SubBytes printf(after subbyte:n。 /取出中间态state映射到S盒中的值赋给中间态state for(i=0。i for(j=0。j statei

7、j=sboxstateij。 for(i=0。i /输出到屏幕显示state for(j=0。j printf(tt%02x ,stateij。 printf(n。 printf(n。 return 0。 3.1.2行移位ShiftRows printf(after shiftrows:n。 / 在中间态的行上, k=state10。 / 第0行不变 state10=state11。 / 第一行循环左移一个字节 state11=state12。 / 第二行循环左移两个字节 state12=state13。 / 第三行循环左移三个字节 state13=k。 k=state20。 state20=

8、state22。 state22=k。 k=state21。 state21=state23。 state23=k。 k=state30。 state30=state33。 state33=state32。 state32=state31。 state31=k。 for(i=0。i /输出到屏幕显示state for(j=0。j printf(tt%02x ,stateij。 printf(n。 printf(n。 return 0。 3.1.3列混合MixColumns=c(x*s(xmod(x4+1unsigned char mixcolumns(unsigned char state44

9、 printf(after mixcolumns:n。/ 实现 (02 03 01 01 与中间态state分别相乘后异或得相应值 for(i=0。i / (01 02 03 01 / (01 01 02 03 k=state0i。 / (03 01 01 02 temp0 = state0i state1i state2i state3i 。 temp1 = state0i state1i 。 temp1 = xtime(temp1。 state0i = temp1 temp0 。 temp1 = state1i state2i 。 temp1 = xtime(temp1。 state1i

10、= temp1 temp0 。 temp1 = state2i state3i 。 temp1 = xtime(temp1。 state2i = temp1 temp0 。 temp1 = state3i k 。 temp1 = xtime(temp1。 state3i = temp1 temp0 。 for(i=0。i /输出到屏幕显示state for(j=0。j printf(tt%02x ,stateij。 printf(n。 printf(n。return 0。3.1.4轮密钥加AddRoundKey(用于将输入或中间态S的每一列与一个密钥字ki进行按位异或,每一个轮密钥由Nb个字组

11、成。unsigned char addroundkey(unsigned char state44,unsigned char w44 printf(addroundkey %d:n,round+。 /将中间态state中的每一列与一个密钥字(w44中的一列进行按位异或 for(i=0。i /完了又赋值给state for(j=0。j stateij=wij。 for(i=0。i /输出到屏幕显示出来state for(j=0。j printf(tt%02x ,stateij。 printf(n。 printf(n。 return 0。 3.1.5密钥扩展通过生成器产生Nr+1个轮密钥,每个轮

12、密钥由Nb个字组成,共有NbNr+1)个字。在加密过程中,需要Nr+1个轮密钥,需要构造4。 for(i=4。i if(i%4=0 rotword0=w1i-1。 rotword1=w2i-1。 rotword2=w3i-1。 rotword3=w0i-1。 printf(rotword(:。 for(j=0。j printf(%02x ,rotwordj。 for(j=0。j subwordj=sboxrotwordj。 printf(nsubword(:。 for(j=0。j printf(%02x ,subwordj。 printf(nn。 for(j=0。j rconj=subword

13、j RconNj 。 printf(after Rcon(:。 for(j=0。j printf(%02x ,rconj。 printf(nn。 for(j=0。j wji%4=rconj wji-4 。 printf(w%d :,count。 for(j=0。j printf( %02x ,wji%4 。 count+。 else for(j=0。j wji%4=wji%4wj(i%4-1。 printf(w%d :,count。 for(j=0。j printf( %02x ,wji%4。 count+。 printf(nn。 printf(密钥扩展 Round key:n。for(i=0

14、。i for(j=0。j printf(tt%02x ,wij。 printf(n。 printf(n。3.1.6逆字节替换与字节代替类似,逆字节代替基于逆S盒实现。unsigned char InvSubbytes(unsigned char state44 for(i=0。i /基于逆S盒的映射替代 for(j=0。j stateij = rsboxstateij。 printf(after InvSubbyte:n。 for(i=0。i for(j=0。j /输出到屏幕显示state printf(tt%02x ,stateij。 printf(n。 printf(n。 return 0

15、。3.1.7逆行移位与行移位相反,逆行移位将态state的后三行按相反的方向进行移位操作,即第0行保持不变,第1行循环向右移一个字节,第2行循环向右移动两个字节,第3行循环向右移动三个字节。unsigned char InvShiftRows(unsigned char state44 k=state13。 state13=state12。 /对中间态state进行移位操作 state12=state11。 / 第0行保持不变 state11=state10。 / 第1行循环右移一个字节 state10=k。 / 第2行循环右移两个字节 / 第3行循环右移三个字节 k=state20。 sta

16、te20=state22。 state22=k。 k=state21。 state21=state23。 state23=k。 k=state30。 state30=state31。 state31=state32。 state32=state33。 state33=k。printf(after InvShiftRows:n。for(i=0。i /输出到屏幕显示state for(j=0。j printf(tt%02x ,stateij。 printf(n。 printf(n。 return 0。3.1.8逆列混合逆列混淆的处理办法与MixColumns相乘进行交换。unsigned char

17、 InvMixColumns(unsigned char state44 printf(after InvMixColumns :n。 /实现(0e 0b 0d 09与中间态state分别相乘后异或得相应值 for(i=0。i / (09 0e 0b 0d temp0 = state0i。 / (0d 09 0e 0b temp1 = state1i。 / (0b 0d 09 0e temp2 = state2i。 temp3 = state3i。 state0i = Multiply(temp0, 0x0e Multiply(temp1, 0x0b Multiply(temp2, 0x0d

18、Multiply(temp3, 0x09。 state1i = Multiply(temp0, 0x09 Multiply(temp1, 0x0e Multiply(temp2, 0x0b Multiply(temp3, 0x0d。 state2i = Multiply(temp0, 0x0d Multiply(temp1, 0x09 Multiply(temp2, 0x0e Multiply(temp3, 0x0b。 state3i = Multiply(temp0, 0x0b Multiply(temp1, 0x0d Multiply(temp2, 0x09 Multiply(temp3,

19、 0x0e。 for(i=0。i /输出到屏幕显示state for(j=0。j printf(tt%02x ,stateij。 printf(n。 printf(n。 return 0。 3.1.9 加密加密部分我分了两种情况,一种是自动检查加密程序的正确性,之前在程序里给明文和密钥赋上初值,运行程序检验结果是否正确;另一种是用户手动输入32位的十六进制数,进行加密,我是把每一具体项模块化,将功能在每个具体模块中实现,只需要直接调用,视觉效果强,一目了然。 下面是实现加密功能一些关键代码void AES_encrypt(unsigned char StateN, unsigned char

20、RoundKeyNmessage16=0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,0x31,0x31,0x98,0xa2,0xe0,0x37,0x07,0x34。key16=0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c。 for(i=0。i for(j=0。j / 分别获取明文和密钥 stateji=messagem。wji=keym。m+。.addroundkey(state,w。 for(round=2。round printf(第 %d 轮

21、加密 : n,round。subbytes(state。shiftrows(state。mixcolumns(state。keyexpand(w, round。addroundkey(state,w。subbytes(state。 /最后一轮shiftrows(state。keyexpand(w, 10。addroundkey(state,w。3.1.10 解密AES解密我也是分成了两个部分,第一部分是在程序中对密文和密钥赋初值,通过与标准对照检查解密过程的正确性;第二部分是用户手动输入密文和密钥,程序对其进行解密,得到最后的明文。解密过程基本如下:1)获取输入的明文和密钥 2)通过密钥扩展过

22、程获取各轮密钥 3)轮密钥加变换过程4)逆行移位 5)逆字节替代 6)轮密钥加变换 7)逆列混淆47步共9次循环,最后一轮实现46步,完成解密过程。主要代码如下:void AES_decrypt(unsigned char StateN, unsigned char wNkey16=0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c。cipher16=0x39,0x25,0x84,0x1d,0x02,0xdc,0x09,0xfb,0xdc,0x11,0x85,0x97,0x19,0x6a

23、,0x0b,0x32。printf(%02x ,keyi。printf(n。 /获取密文和密钥 for(i=0。i for(j=0。j stateji=cipherm。wji=keym。m+。 Keyexpand(w,round 。 /获得密钥扩展列表 AddRoundKey(State, w。 /首轮 for (i = 9。 i 0。 i - /1-9轮 InvShiftRows(state。InvSubbytes(state。Keyexpand(w,round 。 AddRoundKey(State, w。 InvMixColumns(State。 InvShiftRows(State。

24、/最后一轮 InvSubBytes(State。 Keyexpand(w,0 。 AddRoundKey(State, w。4. 测试报告 为检验程序的正确性,需要将结果与标准相对照。参照老师课件里的AES运行程序的运行结果,与我的运行结果对照如下: 下面是我的运行界面:上面的是标准,接着的是我的运行测试,下面的是我从终端中复制的过程:密钥扩展 Round key: ef a8 b6 db 44 52 71 0b a5 5b 25 ad 41 7f 3b 00addroundkey 5 : e0 c8 d9 85 92 63 b1 b87f 63 35 be e8 c0 50 01第 6 轮加密 :after s

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2