AES算法流程
明文分组长度: \(128bit\)
密钥长度: \(128bit\)
迭代轮数: \(10轮\)
加密和解密均在\(4*4\)的矩阵上进行,每个格子\(1\)个字节,共\(16\)个字节\(128bit\)
注意AES算法序列映射到矩阵上是列优先的,所以读取时都是一列一列地读,这不同于DES的行优先

轮密钥加
两个矩阵\(A, B\)进行异或,\(A_{ij} \oplus B_{ij} = C_{ij}\)
字节代替
对于原矩阵的每一个格子的数值\((1btye-8bit)\),前\(4bit\)指明行数,后\(4bit\)指明列数,到S盒(不同于DES中的8个S盒)中找到对应位置的数值作为输出
行移位
\(1\)到\(4\)行依次循环左移 \(0byte\),\(1byte\),\(2byte\),\(3byte\)
注意是循环左移,每移动一位都相当于将最左侧的一个格子放到最右侧
列混合
\(固定矩阵 \times 输入矩阵 = 输出矩阵\)
固定矩阵为:
02 & 03 & 01 & 01 \\
01 & 02 & 03 & 01 \\
01 & 01 & 02 & 03 \\
03 & 01 & 01 & 02
\end{bmatrix}
\]
计算方法
矩阵乘法的规则没有变化
这里的数值计算实际上为多项式计算,下面分为加法和乘法分别讨论
加法
多项式表示: \((x^6 + x^4 + x^2 + x + 1) + (x^7 + x + 1) = x^7 + x^6 + x^4 + x^2\)
二进制表示: \(01010111 \oplus 10000011 = 11010100\)
十六进制表示: \(0x57 \oplus 0x83 = 0xd4\)
因为是模2加法,所以两个十六进制加法只需先将十六进制转化为二进制再进行异或操作
乘法
首先定义了一个运算-x乘法
假设存在一表达式\(b(x)=b_7x^7 + b_6x^6 + b_5x^5 + b_4x^4 + b_3x^3 + b_2x^2 + b_1x + b_0\),x乘法就是\(x*b(x)\)
- \(b_7 = 0\)时,\(x*b(x)\)运算后二进制的结果是\(b(x)\)对应的二进制左移一位,右侧补0
- \(b_7 = 1\)时,\(x*b(x)\)运算后二进制的结果是\(b(x)\)对应的二进制左移一位,右侧补0,再与\(1B(00011011)\)进行异或
也就是说两个十六进制进行乘法运算,我们首先需要转化为二进制。其次我们必须想办法将乘法运算转化为x乘法(这样做只是会大幅度简化计算,否则需要使用两个多项式进行乘法运算),例如\(57H * 13H\),我们可以将\(13H\)转化为\(01H + 02H + 10H\),\(*01H\)就是乘1,\(*10H\)对应多项式的\(x^4\),只需要乘\(4\)次x即可,而乘x的运算结果就是我们上面提到的那两种情况,判断\(b_7\)是否为0即可。这样做即可免除使用两个多项式进行计算。
AES算法流程的更多相关文章
- AES算法,DES算法,RSA算法JAVA实现
1 AES算法 1.1 算法描述 1.1.1 设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...
- 加密算法之AES算法(转)
转载http://www.mamicode.com/info-detail-514466.html 0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组 ...
- 分组密码(五)AES算法② — 密码学复习(八)
在上一篇简单复习了AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础,如果不记得的话点击这里回顾.下面将介绍AES算法的细节. 下面给出AES算法的流程,图片来源:密码算 ...
- AES算法简介
AES算法简介 一. AES的结构 1.总体结构 明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位).根据密钥的长度,算法被称为AES-128,AES ...
- 使用python进行加密解密AES算法
使用python进行加密解密AES算法-代码分享-PYTHON开发者社区-pythoner.org 使用python进行加密解密AES算法 TY 发布于 2011-09-26 21:36:53,分类: ...
- C#与Java互通AES算法加密解密
/// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...
- 双目深度估计传统算法流程及OpenCV的编译注意事项
起因: 1. 双目立体视觉中双目深度估计是非常重要且基础的部分,而传统的立体视觉的算法基本上都在opencv中有相对优秀的实现.同时考虑了性能和效率.因此,学习使用opencv接口是非常重要的. 2. ...
- 深度学习(一)——CNN算法流程
深度学习(一)——CNN(卷积神经网络)算法流程 参考:http://dataunion.org/11692.html 0 引言 20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感 ...
- ORACLE 字段AES算法加密、解密
ORACLE 字段AES算法加密.解密(解决中文乱码问题)2014年02月12日 17:13:37 华智互联 阅读数:97971.加解密函数入口 CREATE OR REPLACE FUNCTION ...
- Imu_tk算法流程及数据采集要求和标定程序参数设置
Imu_tk算法流程 由于VIO中,普遍使用的是精度较低的imu,所以其需要一个较为准确的内参数和noise的估计.Noise大家通常使用Allan方差进行估计可以得到较为可信的结果,这里不赘述了.内 ...
随机推荐
- js 获取年月日时分秒,星期
getDate() { var date = new Date() // 获取时间 var year = date.getFullYear() // 获取年 var month = date.getM ...
- iOS App转让/转移详细步骤(配图)
参考:https://www.jianshu.com/p/57bc6d229be2
- 项目实训DAY 11-12 学习
在神经网络可视化工具中,选择了三种,NNSVG,PlotNeuralNet,GraphCore 前两者应该比较好实现,例子都跑通了,对于定制的代码读起来也不难.PNN的示例图如下 最后一个虽然有实例图 ...
- 【NumPy】Python利用linspace进行数据采样
情景 假设有一堆长度为1000的数据,我现在只想要其中800个并且要求整体趋势一样,那就可以试试使用linspace进行等间距的采样. 简介 linspace(start, stop, num=50, ...
- 在mysql中正常查询的句子,在C#中出错,原因是定义了变量。
在C#中 查询一样. 运行报错 Fatal error encountered during command execution." 命令执行过程中碰到的致命错误." MySqlE ...
- 创建vue项目时所发送错误
该错误的造成可能是以下情况: 1.所需插件可能没有安装齐全: 2.网络不好,更换网络可能会解决: 3.github无法访问,导致无法下载所需模板: (由于github是外网网站,该网站并不是每次访问都 ...
- leetcode用例导入数据库(PHP实现) import leetcode json case into database
<?php // 换成你自己的json $str = '{"headers":{"student":["name","con ...
- 【Unity】阅读LuaFramework_UGUI的一种方法
写在前面 我第一次接触到LuaFramework_UGUI是在一个工作项目中,当时也是第一次知道toLua.但我刚开始了解LuaFramework_UGUI时十分混乱,甚至将LuaFramework_ ...
- 将 Sql Server 表信息 C# 对象化 小工具_ 张光荣 的 正能量
注: a.此程序所得到的结果是根据本人个人习惯生成,所以,肯定不完全适合所有人使用,重在想法...然后个人根据个人需求作出更进...b.程序中可能会出现数据库连接的错误提示[原因概是在sql 连接过程 ...
- canal对接阿里云kafka
一.前提条件 已经有mysql实例 自建或者云上都可以 已经在阿里云的kakfa创建topic 默认不自动创建topic 二.配置要监控的instance 先修改example的配置文件 conf/e ...