zoukankan      html  css  js  c++  java
  • 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)。AESS盒是一个16*16的矩阵所以在进行字节代换时将该字节的前4位作为S盒的行号后4位作为S盒的列号将明文分组的字节替换成S盒中对应的字节

    6.行移位

    行移位第一行整体不移位第二行整体左移一个字节第三行整体左移两个字节第四行整体左移三个字节

    7.列混淆

    列混淆如上图所示列混淆就是在每一列的左边乘上一个矩阵来进行变换

    8.轮密钥加

    轮密钥加将上一个运算的结果与轮密钥进行异或

    二.AES解密算法

    从上图的解密算法可以看出来AES的加密算法和解密算法并不一样如果解密是加密的逆过程则输入密文后应该进行轮密钥加行移位求逆和字节代换求逆而实际上进行的是轮密钥加字节代换求逆行移位求逆列混淆求逆和密钥混淆求逆加)。

    三.AES的特点

    努力,向上,自律
  • 相关阅读:
    一个网络传输框架——zeroMQ 调研笔记
    Node.js的cluster模块——Web后端多进程服务
    boost::spirit unicode 简用记录
    HTTP的长连接和短连接——Node上的测试
    MongoDB 驱动以及分布式集群读取优先级设置
    Lua知识备忘录
    MongoDB使用小结:一些常用操作分享
    此项目与Visual Studio的当前版本不兼容的报错
    @Controller和@RestController的区别
    SQLSERVER中计算某个字段中用分隔符分割的字符的个数
  • 原文地址:https://www.cnblogs.com/machi12/p/15713092.html
Copyright © 2011-2022 走看看