AES加密解密算法

一,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.hqwc.cn/news/571467.html

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

相关文章

3.1 SQL概述

SQL(Structured Query Language) 结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 功能:查询,数据库模式创建,数据库数据的插入与修改,数据库完整性、安全…

js网页侧边悬浮滚动广告

原生js实现网页侧边随页面滚动广告效果 css /*测试用的高度*/html {height: 3000px;}#rightroll {position: absolute;}.close {position: absolute;right: 0;top: -10px;}.close img {width: 20px;height: 20px;}li {list-style: none;width: 80px;height: 80px;background-c…

argocd部署

一、前言 ArgoCD 是一个开源的、持续交付工具,用于自动化部署应用程序到 Kubernetes 集群。它基于 GitOps 理念,通过使用 Git 作为单一的源头来管理应用程序的配置和部署状态,argocd会定时监控git仓库中的yaml配置文件,当git仓库中…

Linux(CentOS)/Windows-C++ 云备份项目(服务器网络通信模块,业务处理模块设计,断点续传设计)

此模块将网络通信模块和业务处理模块进行了合并 网络通信通过httplib库搭建完成业务处理: 文件上传请求:备份客户端上传的文件,响应上传成功客户端列表请求:客户端请求备份文件的请求页面,服务器响应文件下载请求&…

【JVM】JVM简介

文章目录 🌴简介🌲JVM发展史🌸Sun Classic VM🌸Exact VM🌸HotSpot VM🌸JRockit🌸J9 JVMTaobao JVM(国产研发) 🌳JVM 运行流程⭕总结 🌴简介 JVM …

精酿啤酒:特殊酵母的发酵特性与风味表现

Fendi Club啤酒在酿造过程中采用了特殊的酵母,这些酵母具有与众不同的发酵特性和风味表现,为啤酒带来了与众不同的风味和口感。 Fendi Club啤酒使用的酵母种类繁多,包括艾尔酵母和拉格酵母等。这些不同种类的酵母在发酵过程中具有不同的特性和…

靠谱服装库存管理系统大盘点,商陆花、管家婆、秦丝哪家强?

在服装行业,库存管理是至关重要的环节。对于咱服装老板来说,选对的库存管理系统是提高效率、降低运营成本的关键。市场里有不少系统,我们今天拿出来最常见的5款,给大家一个详细指南。 选择服装库存管理系统时应考虑以下因素&…

65W智能快充—同为科技桌面PDU插座推荐

近10年,移动设备的智能化、功能化已经完全且紧密的融入到我们的基础生活与工作当中。 在常态化的电子设备的应用中,设备的电力续航以及后续的供电充电就尤为重要。 就目前而言,所有消费电子产品中的输入以及充电的接口,usb-c可以…

Mysql--sqlyog远程连接

下载安装MySQL 我们在MySQL官方网站中找到我们对应系统的MySQL安装包(如果需要别的安装包可以在下方网站内查找),这里我用redhat9作为演示 MySQL :: Download MySQL Community Server (Archived Versions) 这里我们选择第一个下载到我们主…

【码银送书第十五期】一本书掌握数字化运维方法,构建数字化运维体系

前言 数字化转型已经成为大势所趋,各行各业正朝着数字化方向转型,利用数字化转型方法论和前沿科学技术实现降本、提质、增效,从而提升竞争力。 数字化转型是一项长期工作,包含的要素非常丰富,如数字化转型顶层设计、…

Android源码阅读WorkMangaer - 6

前言 由于笔者目前水平限制,表达能力有限,尽请见谅。 WorkManager 是 Android Jetpack 库的一部分,提供了一种向后兼容的方式来安排可延迟的异步任务,这些任务即使在应用退出或设备重启后也应该继续执行,它是 Androi…

vs2022安装和使用教程(详细)

vs2022和vs2019一样强大,C/C,Python,F#,ios,Android,Web,Node.js,Azure,Unity,HTML,JavaScript等开发都可以执行,大家快来使用它吧~ 如…