AES算法

算法简介

AES本质是一种对称分组密码体制,采用代替/置换网络。每轮由三层组成:线性混合层确保多轮之上的高度扩散,非线性层由16个S盒并置起到混淆的作用,秘钥加密层将子秘钥异或到中间状态。

AES加密数据块和秘钥长度可以是128比特,192比特,256比特,AES加密有很多轮的重复和变换。

大致步骤如下:

  • 1、秘钥扩展(KeyExpansion)
  • 2、初始化轮(Initial Round)
  • 3、重复轮(Rounds),每一轮又包括:SubBytes,ShiftRows,MixColumns,AddRoundKey
  • 4、最终轮(Final Round),最终轮没有MixColums)
    在这里插入图片描述

AES的轮函数

字节代换 (SubBytes)

非线性代换,独立地对状态的每个字节进行,并且代换表(S盒)可逆,记为ByteSub(State),分两步:

  • (1)将字节作为GF(28)上的元素映射到自己的逆元
  • (2)将字节做GF(2)上的放射变换,即 y=Ax-1+B,其中A是一个GF(2)上8☓8的可逆矩阵,B是GF(2)上一个8位列向量

在这里插入图片描述
AES的S盒
在这里插入图片描述
S盒的使用:输入8a,输出就是7e

在这里插入图片描述

逆字节代换

逆字节替代变换是字节替代变换的逆变换,在状态的每个字节上应用逆S盒
y=A-1(x-B)
输入7e,输出8a
在这里插入图片描述
上述S-盒对状态的所有字节所做的变换记为ByteSub (State)
在这里插入图片描述

行移位(ShiftRow)

将状态阵列的各行进行循环移位,不同行的移位量不同:

  • 0行:不动
  • 1行:循环左移C1字节
  • 2行:循环左移C2字节
  • 3行:循环左移C3字节

在这里插入图片描述

算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数Nb为分组长度除32,可看成字节组成的一维数组。
Nb=6的状态阵列
在这里插入图片描述

行移位示意图:
在这里插入图片描述

逆行移位

逆行移位变换是行移位变换的逆变换,它对状态的每一行进行循环右移

  • 第0行保持不变
  • 第1行循环右移C1个字节
  • 第2行循环右移C2个字节
  • 第3行循环右移C3个字节
列混淆(MixColumn)

将每列视为GF(28)上多项式,与固定的多项式c(x)进行模x4+1乘法,要求c(x)模x4+1可逆。

在这里插入图片描述
列混淆运算也可写为矩阵乘法。
在这里插入图片描述
示意图:
在这里插入图片描述

轮密钥加(AddRoundKey)

轮密钥与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得到。轮密钥长度与分组长度相同

密钥编排

密钥编排指从种子密钥得到轮密钥的过程,它由密钥扩展和轮密钥选取两部分组成。其基本原则如下:

  • (1)轮密钥的比特数等于分组长度乘以轮数加1;例如要将128比特的明文经过10轮的加密,则总共需要(10+1)*128=1408比特的密钥。
  • (2)种子密钥被扩展成为扩展密钥;
  • (3)轮密钥从扩展密钥中取,其中第1轮轮密钥取扩展密钥的前Nb个字,第2轮轮密钥取接下来的Nb个字,如此下去。
密钥扩展

扩展密钥是以4字节字为元素的一维阵列,表示为W[Nb* (Nr+1)],其中前Nk个字取为种子密钥,以后每个字按递归方式定义。扩展算法根据Nk≤6和Nk>6有所不同。

种子密钥:以字节为元素的矩阵阵列描述,阵列为4行,列数Nk为密钥长度除32
Nk=4的情况:在这里插入图片描述

在这里插入图片描述
Nk<=6
在这里插入图片描述
在这里插入图片描述

轮密钥选取

轮密钥i(即第i 个轮密钥)由轮密钥缓冲字W[Nb* i]到W[Nb*(i+1)]给出,如图所示。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDA使用方法-----1

0x01 启动IDA new&#xff1a;反汇编一个新文件go&#xff1a;运行&#xff0c;直接进入IDAPrevious&#xff1a;载入一个我们以前编译过的程序 如果不想每次都看到这个对话框&#xff0c;可以取消该对话框底部的Display at startup&#xff08;启动时显示&#xff09;&#x…

objdump命令详解

objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。 选项 --archive-headers -a 显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 -b bfdname --targetbfdname 指定目标码格式。这不是必须的&#xff0c;objdump能自动识别许多格式&#xff0c;比如…

《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】

主题&#xff1a;应用领域驱动开发(Applying Domain-Driven Development) Domain Model是MVC程序的"心脏"&#xff0c;其他的一切&#xff0c;包括Controllers和Views仅仅是用来跟Domain Model交互的一种方式&#xff0c;ASP.NET MVC并没有限制使用在Domain Model上面…

一步一步学pwntools(适合新手)

序 pwntools是一个二进制利用框架。官方文档提供了详细的api规范。然而目前并没有一个很好的新手教程。因此我用了我过去的几篇writeup。由于本文只是用来介绍pwntools使用方法&#xff0c;我不会过于详细的讲解各种二进制漏洞攻击技术。 Pwntools的“Hello World” 栈溢出无…

标志寄存器:CF、PF、AF、ZF、SF、TF、DF、OF

注&#xff1a;下面说到的标志寄存器都是缩写&#xff0c;C就是CF&#xff0c;其他也一样 标志寄存器&#xff1a;C、P、A、Z、S、T、D、O的内容只会是0或1&#xff0c;0表示假&#xff0c;1表示真 O&#xff1a;溢出标志 一个寄存器如果存放的值超过所能表示的范围&#xf…

Firefox2狂占CPU解决办法

https://images.cnblogs.com/cnblogs_com/Tisty/138006/o_firefox3.jpg 看了一下&#xff0c;不知道 "jpeg_free_large" 是干啥的&#xff0c;遂用 "Firefox jpeg_free_large" Google 一下&#xff0c;出来的一堆东西里有帖子说可能和 Apple 的 QuickTime …

PUSHAD和POPAD,以及PUSHA和POPA

PUSHAD PUSHAD也叫保护现场&#xff0c;就是把我们的寄存器压入栈中 pushad是把eax&#xff0c;ecx&#xff0c;edx&#xff0c;ebx&#xff0c;esp、ebp&#xff0c;esi&#xff0c;edi依次压入栈中&#xff0c;ESP会减少32&#xff0c;相当于&#xff1a; push eax push ec…

MOVSX和MOVZX

MOVSX 先符号扩展,再传送 格式&#xff1a; MOVSX 操作数A &#xff0c;操作数B //操作数B的空间小于A比如说我们使用命令&#xff1a; movsx eax&#xff0c;bxbx是16位&#xff0c;eax是32位&#xff0c;传值过程&#xff1a; 先用bx的符号位把eax高16填满&#xff0c;b…

LEA与XCHG

LEA 格式&#xff1a; LEA 通用寄存器 内存地址功能&#xff1a;取地址命令 将内存地址赋值给寄存器 lea eax,dword ptr ds:[ecx0x16]dword 双字 就是四个字节ptr pointer缩写 即指针ds 数据段版寄存器[]里的数据是一个地址值&#xff0c;这个地址指向一个双字型数据 将dwo…

ADC和SBB命令

ADC 带进位加法指令 用法&#xff1a; adc 操作数1&#xff0c;操作数2相当于&#xff1a; 操作数1操作数2进位标志CF->操作数1现在的eax是0&#xff0c;C1&#xff0c;用adc指令直接会是0x6 SBB 带进位减法指令 用法&#xff1a; sbb 操作数1&#xff0c;操作数2相当…

mul和div指令(8位,16位,32位)

MUL 无符号乘法指令&#xff0c;默认操作数与eax相乘&#xff08;这里只说32位&#xff0c;其他与下面的div类似&#xff09; 格式&#xff1a; mul 操作数 //操作数只有一个操作数与eax相乘&#xff0c;结果共有16位&#xff08;这里的16位是16进制数&#xff09;&#xff…

imul和idiv指令

imul 有符号乘法指令&#xff0c;分单操作数&#xff0c;双操作数和但操作数 单操作数&#xff1a;此形式与mul指令使用完全相同&#xff0c;操作数乘以al、ax、或eax寄存器中的值&#xff0c;乘积分别存储到ax、dx&#xff1a;ax或edx&#xff1a;eax中 执行指令&#xff1a…

Ajax的注册应用

最近发现Ajax在用户注册表单和用户登录表单方面应用&#xff0c;最能体现Ajax的交互特点&#xff0c;因此又是写了一个习作&#xff01; 演示效果 新开窗口地址&#xff1a; http://www.klstudio.com/demo/ajax/reg.htm 下载地址:http://www.klstudio.com/demo/ajax/reg.rar &…

XADD和NEG命令

XADD 交换相加指令&#xff0c;先交换然后相加 比如说&#xff1a; xadd eax&#xff0c;ecx /* 相当于&#xff1a;先执行&#xff1a;xchg eax,ecx然后执行&#xff1a;add eax,ecx */此时eax2&#xff0c;ecx3&#xff0c;执行完&#xff1a;eax5&#xff0c;ecx2 neg …

Java——File类

一&#xff0c;File类的概述和构造方法 A&#xff1a;file类的概述 file类可以理解成一个路径 文件夹或者是文件夹路径 路径分为绝对路径和相对路径 绝对路径是一个固定的路径&#xff0c;从盘符开始 这里的G&#xff1a;\TIM 就是一个绝对路径&#xff0c;是一个固定的路…

vue3 配置 @符号

config,ts 配置 有 爆红 安装 npm install 一下 然后 配置 路径提示功能 tsconfig.json 配置 路径提示功能 一共这两个路径配置

mts模式_MTS的完整形式是什么?

mts模式MTS&#xff1a;Microsoft Transaction Server /移动电话服务/多通道电视声音 (MTS: Microsoft Transaction Server/ Mobile Telephone Service/ Multichannel Television Sound) 1)MTS&#xff1a;Microsoft Transaction Server (1) MTS: Microsoft Transaction Server…

Java——IO流

一&#xff0c;IO流常识 Ⅰ&#xff0c;IO流的概述 1&#xff0c;IO流用来处理设备之间的数据传输 2&#xff0c;Java对数据的操作都是通过流的方式 3&#xff0c;Java用于操作流的类都在IO包中 4&#xff0c;流 按流向分为&#xff1a; ①输入流 ②输出流 5&#xff0…

《软件》2011年第6期刊登出 《DB 查询分析器》中断SQL语句的执行

《软件》编辑部寄来了2011年第6期样刊&#xff0c;在2011年第6期&#xff0c;刊登出了本人的论文------“《DB 查询分析器》中断SQL语句的执行”。 论文刊登在第42页&#xff0c;排在第13篇&#xff0c;还比较靠前&#xff0c;呵呵。 在“万方数据”和“中国期刊全文数据库”中…

ret2libc过地址随机化

程序&#xff1a; #include<stdio.h> char buf2[10] "this is buf2"; void vul() {char buf1[10];gets(buf1); } void main() {write(1,"sinxx",5);vul(); }很明显&#xff0c;gets函数存在溢出 编译&#xff1a; gcc -no-pie -fno-stack-protect…