AES加密解密算法

news/2024/5/9 19:04:43

一,AES算法概述

AES属于分组加密,算法明文长度固定为128位(单位是比特bit,1bit就是1位,128位等于16字节)

而密钥长度可以是128、192、256位

当密钥为128位时,需要循环10轮完成加密,在此基础上,密钥每增加64位,就要多循环2轮(即192位密钥循环12轮,256位密钥循环14轮)


 二,加密过程

(零)加密过程总览

以128位密钥为例子,AES算法会对明文先进行【初始变换】(这里的初始变化),然后是9轮【循环运算】,加1轮【最终轮】,最终得到密文

这里的最终轮其实唯一的区别就是最终轮少了9轮主循环中第3步的列混合

 (一)初始变换

首先要理解,无论是明文还是密钥,16个字节(即128位)的字符,在进行加密的过程中都是以4*4的矩阵形式存在的,这个矩阵也有要求——输入的字符需要按从上到下从左往右的顺序排列成矩阵

接受了这个概念后,我们来看AES的初始变换操作,其实十分简单,就是对明文矩阵和密钥矩阵对应的元素异或得到新矩阵,如下图

(二)9轮循环运算

 (1)字节代换

对于完成第一步初始变换的矩阵进行字节代换

我们要将矩阵中的每一个元素都替换掉,但替换是有规则的替换,即S-BOX,按照矩阵元素的值去映射S-BOX中对应的值

(2)行移位

对于完成字节替换的矩阵进行行移位

规则是矩阵的第一行不变,第二行向左移动1个字节,第三行向左移动2个字节,第四行向左移动3个字节

注意,这里认为矩阵的最左边连通最右边,即坐标(2,1)的p2左移后出现在坐标(2,4)

下图是步骤(1)字节替换后的矩阵进行行移位的结果

(3)列混合(该操作在最终轮不执行)

对于完成行移位的矩阵进行列混合

规则是左乘一个给定的4*4矩阵,注意这个矩阵是程序设计时给定的,可能每个程序使用的AES算法中的这个矩阵不一定相同

(注意,这里的矩阵乘法并不是简单的线性代数中的元素相乘相加,本篇不展开讲,详见本篇->关于AES的列混合计算和解密流程问题_aes列混合运算-CSDN博客)

下图是步骤(2)行移位后的矩阵进行列混合的结果

(4)轮密钥加

对于完成列混合的矩阵进行轮密钥加

规则是对完成列混合的矩阵和轮密钥矩阵对应的元素进行异或,这里我们先知道要这样操作即可,至于轮密钥矩阵在后面马上就介绍了

(*)轮密钥矩阵

最开始只有一个密钥矩阵(假设就是下图这个矩阵),我们对这个矩阵的列进行如下标号

9轮循环运算中,每进行一轮,需要对密钥拓展出如下图的ai列,并使(a1, a2, a3, ai)成为当前轮的轮密钥矩阵

拓展时,使用如下规则——

  • 如果i不是4的倍数,那么第i列由如下等式确定:a[i]=a[i-4] ^ a[i-1],例如i等于5时:a[i]=a[1] ^ a[4],即第2列和第5列异或(第1轮没有第5列,第2轮才有第5列)
  • 如果i是4的倍数,那么第i列由如下等式确定:a[i]=a[i-4]^T(a[i-1]),例如i等于4时,a[i]=a[0] ^ T(a[3]),即第1列和经过T函数计算的第4列异或

函数T由3部分组成:字循环、字节代换和轮常量异或(坚持一下,就要结束了┭┮﹏┭┮)

①字循环

下图是对i等于4的情况下进行字循环操作

②字节代换

和9轮循环运算中的第(1)步操作是一样的,将字节映射到进行的S-BOX中进行字节替换

③轮常量异或

轮常量是给定的,这里的Rcon就是轮常量矩阵,可能每个程序使用的AES算法中的这个矩阵不一定相同

(注意,下图左,橙色列和黄色列是轮常量异或,最终再异或蓝色列是按照公式a[i]=a[i-4]^T(a[i-1])拓展轮密钥矩阵,蓝色列就是公式中的a[i-4])


 (补充),AES加密的不同模式

AES加密算法的模式主要有五种,它们是ECB模式、CBC模式、CFB模式、OFB模式和CTR模式。它们之间的主要区别在于加密过程中明文和密文的处理方式以及安全性特点:

  1. ECB模式

    • 每个明文块被独立加密,相同的明文块得到相同的密文块。
    • 不适合加密大量数据或具有重复模式的数据,容易受到攻击。
  2. CBC模式

    • 使用前一个密文块对当前明文块进行加密,增加了随机性,相同的明文块在不同位置得到不同密文块。
    • 需要使用初始化向量(IV)来增加安全性。
  3. CFB模式

    • 使用前一个密文块作为输入生成伪随机密钥流与明文进行异或运算得到密文。
    • 可以支持实时加密和流加密。
  4. OFB模式

    • 类似于CFB,使用前一个密文块生成伪随机密钥流,然后与明文进行异或运算。
    • 对加密和解密中的错误更加鲁棒,但不支持部分更新。
  5. CTR模式

    • 使用一个计数器与密钥输入加密算法生成伪随机密钥流,与明文进行异或运算。
    • 可以并行加密和解密,适用于需要高效加密的场景。

选择哪种模式取决于具体应用的需求和安全性要求,例如需要实时加密或流加密的场景可选用CFB模式,而需要高效加密的场景可选用CTR模式。


三,实际运用

博主最近在钻研逆向技术,在逆向分析过程中会遇到AES加密,因此需要略微了解AES算法的原理(深入了解就是密码学者干的事情了,逆向分析但求能一眼看出是AES加密即可)

如下图,在第31行运用到了AES加密(当然这题属于十分基础的,函数名直接表明是AES加密了)

在函数中此函数中,能够很清晰地看出AES的循环加密过程

知道它是AES加密后,逆向的工作就很清楚了,我们只需要从程序中分析获取密文和密钥,解密即可获得flag,至于解密的具体代码不必关心,可以直接借助python的第三方库解决,会写脚本即可

(这里只做举例,具体问题请具体分析)

from Crypto.Cipher import AES#注意解密过程中密钥的格式需要为byte类型,字符串转byte直接在开头加个b标志
key = b'1234567890123456' 
#注意解密过程中密文的格式需要为byte类型,本题获取到的是十六进制文本,处理成字符串后使用bytes.fromhex()函数转为对应的字节数组
en_text = bytes.fromhex('F3498AED82CE44E2357C23F5DCF897A43B6A7BFEE0467C591E301CBC38F99913')aes = AES.new(key, AES.MODE_ECB) #创建一个AES解密对象,需要传入密钥和加密模式(这里是ECB模式)
print(aes.decrypt(en_text)) #调用decrypt方法实现解密


http://www.mrgr.cn/p/83624137

相关文章

BOSHIDA DC电源模块的设计与制造流程

BOSHIDA DC电源模块的设计与制造流程DC电源模块是一种用于将交流电转换为直流电的设备。它广泛应用于各种电子设备中,如电子产品、工业仪器、电视等。下面是DC电源模块的设计与制造流程的简要描述: 1. 需求分析:在设计DC电源模块之前,首先需要进行需求分析。这包括确定输出…

ABC346 A-G 题解

ABC346 A-G题解 A题目AC Code:时间复杂度 B题目时间复杂度AC Code: C题目时间复杂度AC Code: D题目时间复杂度AC Code: E题目时间复杂度AC Code: F题目时间复杂度AC Code: G题目时间复杂度AC Code&#xff…

linux虚拟机没有ip,网卡服务无法启动的解决

最近使用虚拟机做实验,挂起虚拟机后再回复,发现经常无法使用xshell连接。 进入虚拟机后,使用 ifconfig 命令查看网卡状态,发现网卡的ip没有了 [root@host103 ~]# ifconfig ens33 重启网卡,发现报错。查看网卡目录,也就只有这一个网卡文件,也就是不存在其他网卡配置错误导…

如何制定具有挑战性的绩效目标,同时又能激励员工积极投入工作?

在现代企业管理中,绩效目标的设定不仅是评价员工工作成果的依据,更是激励员工积极投入工作的重要手段。然而,如何制定出既具有挑战性又能激励员工的目标,往往成为管理者需要深思熟虑的问题。本文将探讨如何平衡这两点,实现绩效目标的有效设定。 一、明确绩效目标的重要性 …

20240319-图论

图论练习题目 拓扑排序深度优先搜索方法广度优先搜索方法 无向无权图无向有权图有向无权图 利用广度优先搜索算法有向有权图 带排序的广度优先算法/dijkstra最小生成树prims算法Kruskals Algorithm 最小割 min-cut二分图 Bipartite Graph 队列例题1 所有可能的路径例题2 岛屿数…

列举和删除.NET的版本

删除前 dotnet --list-sdksdotnet --list-runtimesdotnet --info从工具的发布页面下载 .NET 卸载工具 仅删除标记为预览版的 .NET SDK (最高预览版除外)。 dotnet-core-uninstall remove --all-previews-but-latest --sdk因为没有符合条件的,所有并未产生删除。

【详细讲解React 快速入门教程】

🔥博主:程序员不想YY啊🔥 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家💫 🤗点赞🎈收藏⭐再看💫养成习惯 🌈希望本文对您有所裨益,如有…

Jenkins磁盘空间批量清理脚本

一、简介 Jenkins如果没有设置保留构建历史数,磁盘会随着使用次数增加而越来越满,于是需要批量清理一下。 二、清理脚本 找到Script Console 输入脚本,并点击执行,需要注意期望删除的构建历史编号(可以查看下面的效果…

用Facebook开发客户的7点心得和技巧

一、在Facebook上通过“关键词搜用户,关键词搜公共页面,关键词搜小组”可以找到一些客户 关键词尽量用行业大词,不要加限定修饰词,太多限制的话,搜索结果会很少。 二、通过投Facebook广告 这里我使用的是Fomepay的卡…

Unity网络通信系统设计.md

Unity网络通信系统设计Buffer报文 BufferEntity类作为报文基类的作用包括:封装数据:BufferEntity类可以用来封装网络通信中的数据,方便在网络传输中进行处理和管理。提供数据缓冲区:BufferEntity类通常会包含一个数据缓冲区,用来存储待发送或接收的数据,以便进行网络通信…

CAE科普!电池仿真的必要性

在当前高油价与低排放的双重挑战下,新能源汽车以其动力电池驱动的特性成为了低碳环保、节能减排的必然选择。然而,电池系统性能的好坏直接关系到新能源电动汽车的行驶里程和使用便利性,其中充电时间、效率、能量密度以及体积、材质、安全和质量等因素都是目前亟待突破的技术…

WordPress分页函数function

1、可以通过下面的代码在编辑器上添加一个分页符按钮。 2、将下面的代码添加到当前主题functions.php即可。 3、代码如下: function mce_page_break($mce_buttons) { $pos array_search(wp_more, $mce_buttons, true); if ($pos ! false) { $buttons …

支持MacOS苹果操作系统的网卡你用过吗?

Marvell AQC113以太网控制器支持苹果操作系统(MacOS),进一步扩展搭载了AQC113设备的应用领域。 众所周知,苹果操作系统应用生态完善,是业内备受瞩目的巨头级操作系统,其应用领域覆盖了游戏、社交、娱乐、工具,甚至NAS存储、工作站、家用PC及其他嵌入式应用等。 Marvell …

云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作

在大数据 ETL 场景,将 Kafka 中的消息流转到其他下游服务是很常见的场景,除了常规的消息流转外,很多场景还需要基于消息体内容做判断,然后决定下游服务做何种操作。方案概述 在大数据 ETL 场景,将 Kafka 中的消息流转到其他下游服务是很常见的场景,除了常规的消息流转外,…

初始bs4

官网教程地址:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/ lxml、pyquery、bs4、re执行效率对比执行速度对比:https://www.jianshu.com/p/d9812bbce6b6 安装 # 二选一即可 pip install bs4 pip install beautifulsoup4# 建议安装lxml并设置为解析库,速度比html.par…

放大Windows的文本大小(Windows11)

版权木有,侵权不究,欢迎转载

课堂练习:环境体验——Linux 文件操作命令

任务描述 第二个任务就是了解Linxu的文件查看命令,文件编辑基本命令。 相关知识 为了完成本关任务,你需要掌握: 1.文件查看命令。 2.文件编辑基本命令。 文件查看命令 我们要查看一些文本文件的内容时,要使用文本编辑器来查看…

hbase - [06] rowkey的设计

HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位。 HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有下列几种方式: 1、通过get方式,指定rowkey获取唯一一条记…

综合实验(简单BGP)

思路:配置bgp对等体(邻居) bgp宣告路由 bgp与ospf相互导入路由 bgp域内边界路由同AS内的邻居学到的路由可能不可达,所以需要配置向bgp的同AS内的邻居宣告的路由中的下一跳指定为自己 # 配置bgp邻居[R3]bgp 100[R3-bgp]peer 34.1.1.2 as-number 200 # 配置对等体[R4]bgp …

使用Django实现信号与消息通知系统【第154篇—Django】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Django实现信号与消息通知系统 在Web应用程序中,实现消息通知系统是至关重…