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]。

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 这里是波士顿大学的Howard Straubing做的一段很直白的动画。 AES加密过程是在一个4×4的字节...
    张老虎阅读 11,173评论 2 5
  • AES原理(了解) AES的基本要求是密钥长度的最少支持为128、192、256,分组长度128位。 AES算法主...
    Jack4J阅读 3,864评论 0 0
  • 引用 AES加密算法原理AES加密算法的C++实现密码算法详解——AES(高级加密算法) 1. 前言 本文针对加密...
    码梦的一生阅读 15,671评论 2 3
  • 因为要写一个小工具,需要使用对称加密算法,算法暂时选择AES算法。下面是具体的算法:本文转自:http://www...
    vv源vv阅读 2,397评论 0 49
  • AES(Advanced Encryption Standard) 高级加密标准,是 DES(Data Encry...
    TIME_for阅读 4,007评论 2 2