AES算法加密流程

整体特点


①分组密码
明文和密文长度 明文和密文长度128位,密钥长度可变(128/192/256 128/192/256等, 现在选用 128 位)。
②面向二进制的密码算法
能够加解密任何形式的计算机数据。
③不是对合运算
 加解密使用不同的算法。
④综合运用多种密码技术 
置换、代替、代数
⑤整体结构
 sp结构,基本轮函数迭代,迭代轮数可变(≥10)

 迭代轮数

Rijndael密码算法明文分组长度可变,密钥长度也可变。明文分组长度和密钥长度彼此独立地确定为128、192、256bits,因而Rijndael算法有 9种不同的版本,而迭代次数与明文分组长度和密钥长度有关。

NIST选中Rijndael算法作为AES算法,限定了明文分组为128bits,而密钥长度可为128、192、256bits,因而实际上AES有三个版本:AES-128、AES-192、AES-256,相应的迭代轮数为10轮、12轮、14轮。 

算法流程图(以128位的明文与密钥为例,总共10轮)

 

先确定Nk(密钥列数),Nb(明文列数)

状态用以字节(8bits)为基本构成元素,每列4bytes数据,即为32bits。对于Rijndael算法,明文列数为分组长度除以32,通常记为Nb 。 Nb=分组长度(bits)/ 32(bits) Rijndael算法列数Nb可以取的值为4、6、8,对应的明文分组长度为128、192、256 bits。 而AES算法的分组长度固定为128 bits,因此AES明文列数等于固定值Nb=4(此处明文为分组长度为128所以Nb=4)

AES算法加密和解密过程中密钥同样以字节为单位进行计算,密钥状态矩阵也是4行,每列4bytes数据,即为32bits。因而密钥列数记为Nk 。 Nk=密钥长度(bits)/32(bits) AES算法的密钥长度的列数为128bits、192bits、256bits三种不同长度,因此不同密钥长度Nk可以取值分别为4、6、8。(此处nk也等于4)

整体加密分为两部分明文的加密与密钥的生成

明文加密

1.明文初始状态矩阵(state)(注意是怎么排的,行数永远四行,因为它要保证一列是4字节

AES算法中初始状态矩阵由1组长度为128bits明文分组构成,以字节为单位,则总共有16bytes,从左到右开始,则前4个字节组成明文状态矩阵第1列,依次后四个字节组成第2列,依次类推,AES算法明文分组可以构成一个4×4的初始字节状态矩阵

输出密文128bits也是从状态矩阵中类似明文以列方法按相同的顺序提取

2.密钥初始矩阵(与明文相同,注意Nk取值,后面要用)

AES算法的密钥长度的列数为128\192\256bits三种不同长度,因此不同密钥长度Nk(密钥列数)以取值分别为4、6、8。 初始密钥的列数编排类似明文初始状态矩阵,因而密钥构成一个4×4、4×6、4×8的密钥字节矩阵。例如密钥长度为192bits,以字节为单位,则总共有24bytes

 

 3.轮密钥加(第一次)

明文矩阵与初始密钥矩阵做异或运算

4.字节代替(SubBytes)

字节变换(SubBytes)使用一个S盒,S盒是一个16×16的矩阵,如表所示。其非线性置换为:输入的列的每个元素用来指定S盒的地址:前4位指定S盒的行,后4位指定S盒的列。行和列所确定S盒位置的元素取代输入矩阵中相应位置的元素。

5.行移位(ShiftRows) 

状态阵列的4个行循环以字节为基本单位进行左移,而每行循环做移的偏移量是由明文分组的大小和所在行数共同确定,即列数Nb和行号确定。第一行不动,第二行循环左移一位,后面一次增加一位

6.列混合(MixColumns)

补充知识(字节转换为多项式,后面运算用)

不可约多项式

固定矩阵

 将行移位得到的结果与固定矩阵进行矩阵相乘的运算得到结果,计算涉及到的基本运算按GF(8)域上的运算来。加变为异或

乘法则

最后一轮不进行列混合。继续轮密钥加开始循环直到最后一轮,轮密钥加后输出密文(注意以10轮为例,轮密钥加其实执行了11次,进来时多执行了一次

第二部分密钥扩展(即每轮轮密钥加的密钥来源

 注意此处Nk的取值,K0,K1,K2,K3分别代表初始密钥矩阵的第1,2,3,4列

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值