AES算法详解
时间:2021/12/20
一.AES加密算法#
1.AES分组长度、密钥长度、轮数的关系#
AES的分组长度为128bit,密钥长度是可选的,分别为128/192/256bit,对应的轮数分别为10/12/14。
2.加密流程图#
上图以密钥长度为128bit为例,一共有10轮。每一轮有4步,分别是字节代换、行移位、列混淆和轮密钥加,其中在第一轮开始之前要先进行一个轮密钥加,然后在最后一轮(也就是第十轮要少一次列混淆,总的来说多一次轮密钥加,少一次列混淆)
3.AES的分组#
分组:对于输入的128bit数据,有16个字节,把四个字节作为一组,可以形成一个4*4的矩阵。
4.AES的密钥生成#
轮密钥的生成;在使用128bit密钥的情况下,需要进行10轮操作,也就是进行11次轮密钥加,需要11个轮密钥。若一列是4个字节,则一轮需要4列(也就是128bit),11轮需要44列,也就是在原来密钥的情况下还要产生40列。新列的产生方法如上面的公式所示。
5.字节代换(S盒) #
字节代换(S盒):之前说过将输入的一个明文分组作为一个4*4的矩阵,矩阵的每个位置都是一个字节(即8bit)。AES的S盒是一个16*16的矩阵,所以在进行字节代换时,将该字节的前4位作为S盒的行号,后4位作为S盒的列号,将明文分组的字节替换成S盒中对应的字节。
6.行移位#
行移位:第一行整体不移位,第二行整体左移一个字节,第三行整体左移两个字节,第四行整体左移三个字节。
7.列混淆#
列混淆:如上图所示,列混淆就是在每一列的左边乘上一个矩阵来进行变换。
8.轮密钥加#
轮密钥加:将上一个运算的结果与轮密钥进行异或。
二.AES解密算法#
从上图的解密算法可以看出来,AES的加密算法和解密算法并不一样(如果解密是加密的逆过程,则输入密文后,应该进行轮密钥加、行移位求逆和字节代换求逆,而实际上进行的是轮密钥加、字节代换求逆、行移位求逆、列混淆求逆和密钥混淆求逆加)。
三.AES的特点#
作者:machi
出处:https://www.cnblogs.com/machi12/p/15713092.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2019-12-20 Android小记(整理一下自己犯过的错误)