AES

一、实验目的

1、理解AES算法原理
2、掌握AES的实现

二、实验环境

Windows XP、VC6.0/Eclipse

三、实验原理

AES基本变换包括SubBytes(字节替代)、ShiftRows(行移位)、MixColumns(列混淆)、AddRoundKey(轮密钥加),原理如下图所示:

四、实验步骤及思考题

1、编程实现AES

2、验证效果,截图

![S($A0}Q{DV8@TV]EV]M0_VJ.png](http://upload-images.jianshu.io/upload_images/3125377-937f4f80427f8663.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

【思考题】
1、请简述AES算法中字节替换(SubBytes)原理。
矩阵中的各字节通过一个8位的S-box进行转换。这个步骤提供了加密法非线性的变换能力。S-box与GF(28)上的乘法反元素有关,已知具有良好的非线性特性。为了避免简单代数性质的攻击,S-box结合了乘法反元素及一个可逆的仿射变换矩阵建构而成。此外在建构S-box时,刻意避开了固定点与反固定点,即以S-box替换字节的结果会相当于错排的结果。AES算法中的S盒如图2.2所示
例如一个字节为0x19,经过S盒变换查找n(1,9) = 0xd4,所以就替换为0xd4。

2、请简述AES算法中轮密钥加 (AddRoundKey)原理。

AES算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。它涉及如下三个模块:
(1)位置变换(rotword)——把一个4字节的序列[A,B,C,D]变化成[B,C,D,A];
(2)S盒变换(subword)——对一个4字节进行S盒代替;
(3)变换Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]。这里的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]……   
扩展密钥的生成:扩展密钥的前Nk个字就是外部密钥K;以后的字W[[i]]等于它前一个字W[[i-1]]与前第Nk个字W[[i-Nk]]的“异或”,即W[[i]]=W[[i-1]]W[[i- Nk]]。但是若i为Nk的倍数,则W[i]=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。

五、实验小结(实验过程中遇到什么问题?如何解决?)

问题可多了,当然是自己解决啊!!!

你可能感兴趣的:(AES)