AES算法实验报告(共7页).doc

上传人:飞****2 文档编号:14695887 上传时间:2022-05-05 格式:DOC 页数:7 大小:181.50KB
返回 下载 相关 举报
AES算法实验报告(共7页).doc_第1页
第1页 / 共7页
AES算法实验报告(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《AES算法实验报告(共7页).doc》由会员分享,可在线阅读,更多相关《AES算法实验报告(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上实 验 报 告 专心-专注-专业姓名:XXXXXXX 学 号:XXXXXXXXXX 班级:XXXXXXXXX 日期:2013/12/*题目:AES算法实验一、实验环境 1硬件配置:处理器:Inter(R) Core(TM) i5-2430M CPU 2.40GHz (4 CPUs) ,2.4GHz内存:2048MB RAM2使用软件:(1) 操作系统:win7 旗舰版(2) 软件工具:Microsoft Visual c+ 6.0二、实验涉及的相关概念或基本原理 AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可

2、以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了 AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。对称密码算法根据对明文消息加密方式的不同可分为两大类 ,即分组密码和流密码 。分组密码将消息分为固定长度的分组 ,输出的密文分组通常与输入的明文分组长度相同 。AES 算法属

3、于分组密码算法 ,它的输入分组 、输出分组以及加/ 解密过程中的中间分组都是 128比特 。密钥的长度 K为 128,192 或 256 比特 。用 Nk=4,6,8 代表密钥串的字数 ( 1 字 =32 比特) ,在本文编制的程序中由用户选定 。用 Nr 表示对一个数据分组加密的轮数 ( 加密轮数与密钥长度的关系见表 1) 。每一轮都需要一个和输入分组具有同样长度 ( 128 比特) 的扩展密钥Ke的参与 。由于外部输入的加密密钥 K 长度有限 ,所以在 AES 中要用一个密钥扩展程序 ( KeyExpansion) 把外部密钥 K 扩展成更长的比特串 ,以生成各轮的加密密钥。( 1) 加密

4、变换设 X 是 AES 的 128 比特明文输入 ,Y 是 128 比特的密文输出 ,则 AES 密文 Y可以用下面的复合变换表示 : Y=A R A C S C Sk(r+1 ) S kr R Ak(r21)其中 ”“表示复合运算 。这里 Aki :表示对 X 的一个变换Aki ( X) =X Ki ( Ki为第 i 轮的子密钥 ,为比特串的异或运算) 。S:S 盒置换 。即对每一个字节用 S2Box 做一个置换 。S2Box 是一个给定的转换表 。R: 行置换 。C: 列置(换 。sx) =a ( x) s ( x)解密变换是加密变换的逆变换 。三、实验内容AES是分组密钥,算法输入128

5、位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。由于外部输入的加密密钥K长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥K扩展成更长的比特串,以生成各轮的加密和解密密钥。1.1圈变化AES每一个圈变换由以下三个层组成:非线性层进行Subbyte变换;线行混合层进行ShiftRow和MixColumn运算;密钥加层进行AddRoundKey运算。 Subbyte变换是作用在状态中每个字节上的一种非线性字节转换,可以通过计算出来

6、的S盒进行映射。 ShiftRow是一个字节换位。它将状态中的行按照不同的偏移量进行循环移位,而这个偏移量也是根据Nb的不同而选择的3。 在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式a(x)与固定多项式c(x)相乘的结果。 b(x)=c(x)*a(x)的系数这样计算:*运算不是普通的乘法运算,而是特殊的运算,即 b(x)=c(x)a(x)(mod x4+1) 对于这个运算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0其中,符号“。”表示模一个八次不可约多项式的同余乘法3。对于逆变化,其矩阵C要改变成相应的D,即b(x)=d(x)a(x)。

7、 密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或”。 根据线性变化的性质1,解密运算是加密变化的逆变化。这里不再详细叙述。1.2轮变化 对不同的分组长度,其对应的轮变化次数是不同的,如表1所列。1.3密钥扩展AES算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。它涉及如下三个模块: 位置变换(rotword)把一个4字节的序列A,B,C,D变化成B,C,D,A; S盒变换(subword)对一个4字节进行S盒代替; 变换RconiRconi表示32位比特字xi-1,00,00,00。这里的x是(02),如 Rcon1=;

8、Rcon2=;Rcon3= 扩展密钥的生成:扩展密钥的前Nk个字就是外部密钥K;以后的字W等于它前一个字Wi-1与前第Nk个字Wi-Nk的“异或”,即W=Wi-1W- Nk。但是若为Nk的倍数,则W=Wi-NkSubword(Rotword(W-1)Rconi/Nk。流程图:主要代码:unsigned char* AES:Cipher(unsigned char* input)unsigned char state44;int i,r,c;for(r=0; r4; r+)for(c=0; c4 ;c+)staterc = inputc*4+r;AddRoundKey(state,w0);for

9、(i=1; i=10; i+)SubBytes(state);ShiftRows(state);if(i!=10)MixColumns(state);AddRoundKey(state,wi);for(r=0; r4; r+)for(c=0; c4 ;c+)inputc*4+r = staterc;return input;unsigned char* AES:InvCipher(unsigned char* input)unsigned char state44;int i,r,c;for(r=0; r4; r+)for(c=0; c=0; i-)InvShiftRows(state);In

10、vSubBytes(state);AddRoundKey(state, wi);if(i)InvMixColumns(state);for(r=0; r4; r+)for(c=0; c4 ;c+)inputc*4+r = staterc;unsigned char* in = (unsigned char*) input;int i;if(!length)while(*(in+length+);in = (unsigned char*) input;for(i=0; ilength; i+=16)Cipher(in+i);return input;unsigned char* in = (un

11、signed char*) input;int i;for(i=0; ilength; i+=16)InvCipher(in+i);int i,j,r,c;unsigned char rc = 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36;for(r=0; r4; r+)for(c=0; c4; c+)w0rc = keyr+c*4;for(i=1; i=10; i+)for(j=0; j4; j+)unsigned char t4;for(r=0; r4; r+)tr = j ? wirj-1 : wi-1r3;if(j

12、 = 0)unsigned char temp = t0;for(r=0; r3; r+)tr = Sboxt(r+1)%4;t3 = Sboxtemp;t0 = rci-1;for(r=0; r4; r+)wirj = wi-1rj tr;int r,c;for(r=0; r4; r+)for(c=0; c4; c+)staterc = Sboxstaterc;unsigned char t4;int r,c;for(r=1; r4; r+)for(c=0; c4; c+)tc = stater(c+r)%4;for(c=0; c4; c+)staterc = tc;void AES:Add

13、RoundKey(unsigned char state4, unsigned char k4)int r,c;for(c=0; c4; c+)for(r=0; r4; r+)staterc = krc;void AES:InvSubBytes(unsigned char state4)int r,c;for(r=0; r4; r+)for(c=0; c4; c+)staterc = InvSboxstaterc;void AES:InvShiftRows(unsigned char state4)unsigned char t4;int r,c;for(r=1; r4; r+)for(c=0

14、; c4; c+)tc = stater(c-r+4)%4;for(c=0; c4; c+)staterc = tc;void AES:InvMixColumns(unsigned char state4)unsigned char t4;int r,c;for(c=0; c 4; c+)for(r=0; r4; r+)tr = staterc;for(r=0; r4; r+)staterc = FFmul(0x0e, tr) FFmul(0x0b, t(r+1)%4) FFmul(0x0d, t(r+2)%4) FFmul(0x09, t(r+3)%4);四、实验总结分析心得体会AES加密算法是前辈们付出很多才有的知识。在短时间的学习过程中我也只是了解了加解密的具体流程,而对于为什么要进行这种操作的思考就显得很浅显,所以还要多花一点时间去更深层次的研究本质思想。希望在以后的学习实践中,能够有更多的收获。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁