2022年AES加密解密的实现[整 .pdf
《2022年AES加密解密的实现[整 .pdf》由会员分享,可在线阅读,更多相关《2022年AES加密解密的实现[整 .pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、指导老师评阅成绩表学习与工作态度(30%)选题意义(10%)文献综述(10%)研究水平与设计能力(20%)课程设计说明书(论文)撰写质量(20%)设计创新(10%)总分指导老师签名:年月日课程设计答辩记录及评价表学生讲述情况教师主要提问记录学生回答问题情况答辩评分评分项目分值评价参考标准评分总分优良中及格差选题意义10 9 8 7 6 4 文献综述10 9 8 7 6 4 研究水平与设计能力20 19 17 15 13 10 课程设计说明书(论文)撰写质量20 19 17 15 13 10 设计创新10 9 8 7 6 4 答辩效果30 28 25 22 19 15 答辩小组成员签名答辩小组组
2、长签名:年月日课程设计成绩评定表成绩汇总评分项目评分比例分数课程设计总分指导老师评分50%答辩小组评分50%附件:课程设计成绩评价表名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 33 页 -目录1.背景与意义 .12.系统设计 .12.1 系统主要目标.12.2 主要软件需求(运行环境).22.3 功能模块与系统结构.23.系统功能程序设计.53.1 基本要求部分.53.1.1字节替换.53.1.2行移位.63.1.3列混合.83.1.4轮密钥加.93.1.5密钥调度.10 3.1.6逆字节替换.12 3.1.7逆行移位.12 3.1.8逆列混合.13 3.1.9输出中间状态s
3、tate和轮密钥 temp.14 3.1.10加密.14 3.1.11解密.16 3.2 较高要求部分.17 3.2.1 密钥长度 192,256 的实现 .17 3.2.2 密钥采用 ASCII 码.17 3.2.3 明文分组和自动填充.18 3.2.4 任意字符串加密.19 3.2.5 文件加密解密 .20 3.2.6 简单计时 .21 3.2.7 合理的结构和简单加工的交互界面.22 3.3 程序界面预览.22 4.测试报告 .23 4.1 测试标准加密解密功能.23 4.2 测试字符串加密和解密功能.24 4.2.1 加密 .24 4.2.2 解密 .25 4.3 测试文件加密和解密功
4、能.27 4.3.1 加密 .27 4.3.2 解密 .28 4.4 测试中发现的一些问题.29 5.结论 .31 参考文献 .31 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 33 页 -第 1 页 共 33 页1.背景与意义科技的发展使计算机深入到了我们生活的的方方面面,计算机在带来方便和提高了工作效率的同时却也带来了各种各样的新问题,其中信息安全问题最为突出,随着计算机信息安全要求的不断提高,计算机保密系统已变得越来越重要,所以我们需要一种较为可靠的加密算法来保护我们信息的安全。由于 DES已经无法满足高保密性的要求,美国于1997 年 1 月开始征集新一代数据加密标准
5、(即高级数据加密标准,Advanced Encryption Standard,AES)。2000 年 10 月 2 日,正式宣布选择比利时密码学家所开发的Rijndael算法成为AES的最终算法。AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16 字节)分组加密和解密数据。与公共密钥密码
6、使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。2.系统设计2.1 系统主要目标基本要求部分:1.在深入理解AES加密/解密算法理论的基础上,设计一个AES加密/解密软件系统;2.完成一个明文分组的加解密,明文和密钥是十六进制,长度都为128 比特(32 个 16 进制数),按照标准输入明文和密钥,输出密文,进行加密后,能够进行正确的解密;3.程序运行时要求输出每一轮使用的密钥,以及每一轮中字节替代、行移位、列混合和密钥加等每一步操作之后的16 进制表示的值;4.提供运行标准示
7、例的选项;5.程序有良好的人机交互操作;6.提供所设计系统的报告及完整的软件。较高要求部分:1可实现 AES128,AES192,AES256三种密钥长度加密方式;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 33 页 -第 2 页 共 33 页2密钥以 ASCII 码形式读入;3.可实现明文自动分组功能和自动填充分组功能,并能正确加解密;4.可实现任意字符(如中文)的加密和正确解密;5.可实现任意小的文件加密,并能正确解密;6.简单的计时功能;7.程序代码有比较好的结构,函数模块划分合理。2.2 主要软件需求(运行环境)本软件适用VC语言编写,编译成功后的EXE文件可以在装有
8、windows 系统的任何计算机上使用。测试平台:Windows 7 Professional 使用软件:Visual C+6.0 2.3 功能模块与系统结构AES算法是一个数据块长度和密钥长度都可变的迭代分组加密算法,数据块长度和密钥长度可以为128、192、256 位。在加密前对数据块做预处理。首先,把数据块分组,16 字节一组,然后把字记为列的形式(如下图):AES把 128 位的输入看作是一个由16 个字节组成的向量,并用一个 44 的列矩阵的形式来表示。按同样的方式表示一个密钥矩阵,如图所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 33 页 -第 3 页 共 3
9、3 页我们用 Nb 表示一个数据块中字的个数(列的个数),这里我们用标准算法,Nb=4;用 Nk表示密钥中字的个数(列的个数),算法轮数Nr 由 Nb和 Nk共同决定。如下表:Nr Nb=4 Nk=4 10 Nk=6 12 Nk=8 14 通过 Nr 和 Nk的值,我们就可以确定AES中每个分组进行加密的轮数。AES一轮分组的加密过程如图所示:明文 X Nr 轮迭代密文 Y 子密钥0K(a)AES 算法框图(*)X字节代替行移位列混合rX1K(b)一轮 AES 结构名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 33 页 -第 4 页 共 33 页本 AES系统的一些主要的关键函
10、数设置如下表所示:其中,Cipher 函数按加密流程图调用AddRounkey,SubBytes,ShiftRows,MixColumns函数实现一个分组的加密。而 InvCipher函数按 解密流程调用 AddRounkey,InvShiftRows,InvSubBytes,InvMixColumns函数实现一个分组的解密。本 AES加解密的结构如图所示:函数含义KeyExpansion 密钥扩展SutBytes 字节替代ShiftRows 行移位变换MixColumns 列混合变换AddRoundkey 轮密钥加NkNr 计算加密轮数InvCipher 解密一个分组Cipher 加密一个分
11、组InvMixColumns 逆列混合InvShiftRows 逆行移位InvSubBytes 逆字节替代Readtext 读文本文件名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 33 页 -第 5 页 共 33 页Example 调用了 NkNr,KeyExpansion,Cipher,InvCipher进行加密和解密演示Encrypt调用了 NkNr,Readtext,KeyExpansion,Cipher 进行字符串加密Decrypt调用了 NkNr,Readtext,KeyExpansion,InvCipher进行字符串解密Edfile 调用了 NkNr,Readtex
12、t,KeyExpansion,Cipher(或 InvCipher)进行文件的加密或解密。3.系统功能程序设计3.1 基本要求部分3.1.1 字节替换字节变换是一个关于字节的非线性变换。字节变换由S盒(S-Box)完成,它是可逆的,且由两个可逆变换复合而成。其中加密S-BOX用于加密过程,逆S-BOX用于解密过程。Main Menu 1 到 5?Example Encrypt Decrypt Edfile 输入选项x X=1 X=2 X=3 X=4ORX=5 否名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 33 页 -第 6 页 共 33 页通过查表取输出的方式,若要查找状态中
13、的一个字节xy,选取 S盒中第 x 行第 y 列对应的字节就是替换后的输出。结构如图所示:关键代码:void SubBytes()int i,j;for(i=0;i4;i+)for(j=0;j4;j+)stateij=getSBoxValue(stateij);3.1.2 行移位行移位根据不同的分组长度做相应的循环左移位运算。行1 不移位,行2 移 c1 字节,行 3 移 c2 字节,行 4 移 c3 字节。结构如图所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 33 页 -第 7 页 共 33 页关键代码:void ShiftRows()int i,j;char temp
14、;temp=state10;state10=state11;state11=state12;state12=state13;state13=temp;temp=state20;state20=state22;state22=temp;temp=state21;state21=state23;state23=temp;temp=state30;state30=state33;state33=state32;state32=state31;state31=temp;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 33 页 -第 8 页 共 33 页3.1.3 列混合它只在 AES的第
15、 0,1,Nr 一 1 轮中使用,在第N r 轮中不使用该变换。乘积矩阵中的每个元素都是一行和一列对应元素的乘积之和。在MixColumns 变换中,乘法和加法都是定义在 GF(82)上的。State 的每一列 (jib,)1=0,,3;J=0,bL被理解为 GF(82上 的 多 项 式,该 多 项 式 与 常 数 多 项 式012233)(axaxaxaxa相 乘 并 模1)(4xxm。这个运算需要做GF(82)上的乘法。但由于所乘的因子是三个固定的元素02、03、01,所以这 些 乘 法 运 算 仍 然 是 比 较 简 单 的(注 意 到 乘 法 运 算 所 使 用 的 模 多 项 式 为
16、1)(348xxxxxm)。设一个字节为b=(b7b6b5b4b3b2b1b0),则b01=b;b02=(b6b5b4b3b2b1b00)+(000b7b70b7b7);b03=b01+b02。列混合运算可以表示为GF(28)上的矩阵变换:00112233ba02030101ba01020301b01010203a03010102ba这里我们先定义域上的乘法到时候直接调用unsigned char x01(unsigned char b)return b;unsigned char x02(unsigned char b)if(b 0 x80)/判断最高位是否为1,10000000为 0 x8
17、0 return(b1);/左移一位 else 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 33 页 -第 9 页 共 33 页return(b1)0 x1b);/左移一位与16 进制 1b 异或 .以下省略关键代码:void MixColumns(unsigned char x44)int r=0,c=0;unsigned char temp44;for(r=0;r4;r+)for(c=0;c4;c+)temprc=xrc;for(c=0;c4;c+)x0c=x02(temp0c)x03(temp1c)x01(temp2c)x01(temp3c);x1c=x01(temp
18、0c)x02(temp1c)x03(temp2c)x01(temp3c);x2c=x01(temp0c)x01(temp1c)x02(temp2c)x03(temp3c);x3c=x03(temp0c)x01(temp1c)x01(temp2c)x02(temp3c);3.1.4 轮密钥加在轮密钥加法操作中,轮密钥简单地地使用按位异或操作,轮密钥通过密钥调度过程,对密钥进行扩展而得到,然后明文与相应的子密钥异或即可。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 33 页 -第 10 页 共 33 页关键代码:void AddRoundKey(int round)int i,j
19、;for(i=0;i4;i+)for(j=0;j4;j+)stateji=RoundKeyround*Nb*4+i*Nb+j;/找到对应的子密钥异或 3.1.5 密钥调度密钥调度包括两个部分:密钥扩展和轮密钥选取。密钥扩展的作用是在数据加密/解密前得到轮变换中中使用的轮密钥,其基本原则是:1)轮密钥的密钥长度为分组长乘以(1+Nr),如果分组长为128bit,轮数为了10,则轮密钥的长度为128*(10+1)=1408bit;2)种子密钥扩展为扩展密钥,种子密钥长度为4*NK个字节;3)轮密钥由以下方法从扩展密钥中获得:对第1 轮密钥由前Nb个字构成;第2 轮密钥由第二个 Nb 个字节即第Nb
20、+1 个字到第 2Nb个字构成;以下依次类推。扩展密钥用数组w(Nb*(Nr+1)表示,前 Nk 个字是原密钥,其它密钥字通过计算方法生成。子字节变换是一个返回4 个字节的函数,每个字节都是它输入字中相应位置字节通过S盒作用后的结果。循环左移变换返回的是这4 个字节经循环置换后的字,即将该字循环左移一个字节,如输入字为 w=(a0,a1,a2,a3),则变换后输出字为w=(a1,a2,a3,a0)。扩展密钥的前Nk个字由种子密钥构成,随后的字 wi 等于字 wi-1经一些变换后得到的字temp 和字 Wi-Nk 异或而成;而且对位置为Nk倍数的字变换中不仅运用了循环左移变换和子字节变换,还运用
21、了轮常数Rcon对变换后的字temp 进行异或。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 33 页 -第 11 页 共 33 页对轮常数的定义为:Rconi=(Rci,00,00,00)而 Rci表示在有限域GF(28)中 xi-1的值,即:Rci=1 (即 01)Rci=x(Rci-1)=xi-1关键代码:void KeyExpansion()int i,j;char temp4,k;for(i=0;iNk;i+)/首轮轮密钥是自身 RoundKeyi*4=Keyi*4;RoundKeyi*4+1=Keyi*4+1;RoundKeyi*4+2=Keyi*4+2;Roun
22、dKeyi*4+3=Keyi*4+3;while(i (Nb*(Nr+1)/通过 Nr 长度计算轮密钥的长度 for(j=0;j4;j+)tempj=RoundKey(i-1)*4+j;/前一列 if(i%Nk=0)/i整除 Nk 时有其他变换 k=temp0;/左移一位 temp0=temp1;temp1=temp2;temp2=temp3;temp3=k;temp0=getSBoxValue(temp0);/查 S 盒 temp1=getSBoxValue(temp1);名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 33 页 -第 12 页 共 33 页 temp2=ge
23、tSBoxValue(temp2);temp3=getSBoxValue(temp3);temp0=temp0 Rconi/Nk;/每组第一个与Rcon异或 RoundKeyi*4+0=RoundKey(i-Nk)*4+0 temp0;/得到轮密钥 RoundKeyi*4+1=RoundKey(i-Nk)*4+1 temp1;RoundKeyi*4+2=RoundKey(i-Nk)*4+2 temp2;RoundKeyi*4+3=RoundKey(i-Nk)*4+3 temp3;i+;3.1.6 逆字节替换和字节替代类似,只是所用的S 盒不同关键代码:void InvSubBytes()int
24、 i,j;for(i=0;i4;i+)for(j=0;j4;j+)stateij=getSBoxInvert(stateij);3.1.7 逆行移位行移位根据不同的分组长度做相应的循环右移位运算。行1 不移位,行2 移 c1 字节,行 3 移 c2 字节,行 4 移 c3 字节,与行移位相似。关键代码:名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 33 页 -第 13 页 共 33 页void InvShiftRows()int i,j;char temp;temp=state13;/第二行 state13=state12;state12=state11;state11=st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年AES加密解密的实现整 2022 AES 加密 解密 实现
限制150内