AES加密算法

AES(Advanced Encryption Standard)加密算法

参考 “【AES加密算法】| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安全” https://www.bilibili.com/video/BV1i341187fK?from=search&seid=14609524973320441322
参考 《密码编码与信息安全——C++实践》

基本原理

  • AES属于分组加密算法,属于对称加密,故在传递密钥途中有密钥泄露的风险
  • 明文plainText和密文cipherText固定长度为128bit(16B)
  • 密钥长度为128,192,256bit,密钥长度会改变算法循环次数,分别对应10/12/14轮循环
    在这里插入图片描述

加密过程

在这里插入图片描述

  • 先将16Byte(一个字节是一个0xFF)数据合成一个矩阵,再进行后续计算
    在这里插入图片描述

  • 以密钥为128bit为例,进行10轮循环,包含9轮循环运算和1轮最终轮运算,在最终轮运算中只进行1,2,4步骤(不进行列混合步骤)
    在这里插入图片描述

  • 初始变换。将明文矩阵和密钥矩阵按字节中每一位异或。
    在这里插入图片描述
    在这里插入图片描述

  • 9轮循环中1.字节代换。这是一个S盒代换,是一个非线性代换。
    如将(0, 0)处19查S盒后替换。
    在这里插入图片描述
    在这里插入图片描述

  • 9轮循环中2.行移位。将每一行字节按照字节循环左移。
    在这里插入图片描述
    在这里插入图片描述

  • 9轮循环中3.列混合。将上一步得到的矩阵左乘一个矩阵(不是矩阵点乘的相乘相加)。而是相特殊乘(01相乘就是本身,无需管)再相互异或。
    相特殊乘再相异或
    使用02,03,04相乘

  • 9轮循环中4.轮密钥加。即将上一步得到的矩阵的每一列和与子密钥矩阵异或操作。
    在这里插入图片描述

密钥生成

使用密钥扩展得到10轮的密钥。将原初始密钥矩阵逐字节列向右边列扩展,根据该列是否是4的倍数扩展方式不同。如果是4的倍数则比较麻烦,如果不是4的倍数则需要进行异或操作。
在这里插入图片描述

  • 若不是4的倍数
    在这里插入图片描述
  • 若是4的倍数,则要进行字循环;字节代换;轮常量异或。上面三步称为T函数,再将T函数得到的结果和W[i-4]异或。细节来说,就是先对W[i-1]即前一列数据循环左移一个字节;再对字循环结果使用S盒进行字节代换;再同轮常量进行异或。将得到的结果再和W[i-4]异或。
    总过程

字循环
S盒扩展
轮常量异或

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值