Crypto-AES

AES

明文和密钥的结构

​ 高级加密标准(AES,Advanced Encryption Standard),分组加密算法的一种。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。

​ AES的处理单位是字节,一个块128个bit,也就是16个字节,可以写成4*4的矩阵,按顺序如下排列:

在这里插入图片描述

​ 128位密钥也是用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个32位比特字组成的序列W[0],W[1], … ,W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,用于加密运算中的初始密钥加。后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加,如下图所示:

在这里插入图片描述

加密流程

每一轮共分为四个步骤:

  • 字节代换
  • 行位移
  • 列混合
  • 轮密钥加

在第一轮的开头先要进行一次密钥加,在最后一轮是不进行列混合

在这里插入图片描述
在这里插入图片描述

字节代换

AES的字节代换其实就是一个简单的查表操作。AES定义了一个S盒和一个逆S盒。状态矩阵中的元素按照下面的方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,取出S盒或者逆S盒中对应的行的元素作为输出。例如,加密时,输出的字节S1为0x12,则查S盒的第0x01行和0x02列,得到值0xc9,然后替换S1原有的0x12为0xc9。

行移位

​ 行移位是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节,如下图所示:

在这里插入图片描述

列混合

​ 列混合变换是通过矩阵相乘来实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵。矩阵元素的乘法和加法都是定义在基于GF(2^8)上的二元运算,并不是通常意义上的乘法和加法,如1+1=0,-1+0=1。

​ AES中式将输入的矩阵左乘一个固定的矩阵,其规则和矩阵相乘的规则相同,但运算是在域下进行的,注意是先相乘模除后再异或,切不可先异或后再模除

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

密钥加

​ 将轮密钥和状态矩阵逐比特异或即可

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值