aes加密流程

对称加密算法(AES):原理、应用与代码实现 AES 算法作为一种强大的对称加密算法,在保障信息安全方面具有重要的地位和广泛的应用。通过对其原理的深入理解,我们知道了它是如何通过一系列复杂的操作将明文转换为密文,以及如何通过逆操作进行解密。在实际应用中,AES 广泛应用于数据加密与存储、网络通信安全、多媒体内容保护等多个领域,为我们的数字生活和工作提供了可靠的安全保障。在实现 AES 算法的加解密功能时,C# 和 Python 都提供了相应的库和方法,使得我们能够方便地在应用程序中使用 AES 进行数据保护。 阅读详情

AES加密

密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,目前已经被全世界广泛使用,同时AES已经成为对称密钥加密中最流行的算法之一。AES支持三种长度的密钥:128位,192位,256位。

目前被使用多个地方,我目前看到的一个项目使用这些代码。(注释:部分内容来源于https://zhuanlan.zhihu.com/p/562256846

加密原理

使用对称加密的方式,支持的密钥长度为128,192,256位。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AES加密一共涉及到5种方法:明文矩阵填充,轮秘钥填充(字节替代,行位移,列混淆,轮密钥加密)。不同的秘钥加密的论量是不同的。

明文数据对齐填充

被加密的数据类型进行数据相关的处理,需要实现数据对齐的原则。如果出现数据不对齐的情况,会开始进行数据的填充的操作。目前有多种的填充方式:1,NoPadding 2,PKCS5Padding 3,ISO10126Padding

NoPadding

不做任何填充,要求明文必须是16bit的整数倍。

PKCS5Padding(默认)

如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。8

比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}

PKCS#7(推荐)

如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。每个字节值均为0x06。

  • 明文(10 字节,示例为十六进制):`0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A
  • 填充后(16 字节):0x01 0x02 ... 0x0A 0x06 0x06 0x06 0x06 0x06 0x06
  • 解密时:读取最后 1 个字节的值n,直接删除末尾n个字节即可恢复明文(无歧义)。

在这里插入图片描述

轮密钥加密

在这里插入图片描述

把加密的4x4的正方形矩形和AES128位的第一个的填充数据对应的位置进行异或计算,得出来之后4x4正方形矩形(16位)。

字节替代

使用直接代换表进行转换为对应的信息

|    | 00  | 01  | 02  | 03  | 04  | 05  | 06  | 07  | 08  | 09  | 0A  | 0B  | 0C  | 0D  | 0E  | 0F  
|----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----
| 00 | 63  | 7C  | 77  | 7B  | F2  | 6B  | 6F  | C5  | 30  | 01  | 67  | 2B  | FE  | D7  | AB  | 76  
| 01 | CA  | 82  | C9  | 7D  | FA  | 59  | 47  | F0  | AD  | D4  | A2  | AF  | 9C  | A4  | 72  | C0  
| 02 | B7  | FD  | 93  | 26  | 36  | 3F  | F7  | CC  | 34  | A5  | E5  | F1  | 71  | D8  | 31  | 15  
| 03 | 04  | C7  | 23  | C3  | 18  | 96  | 05  | 9A  | 07  | 12  | 80  | E2  | EB  | 27  | B2  | 75  
| 04 | 09  | 83  | 2C  | 1A  | 1B  | 6E  | 5A  | A0  | 52  | 3B  | D6  | B3  | 29  | E3  | 2F  | 84  
| 05 | 53  | D1  | 00  | ED  | 20  | FC  | B1  | 5B  | 6A  | CB  | BE  | 39  | 4A  | 4C  | 58  | CF  
| 06 | D0  | EF  | AA  | FB  | 43  | 4D  | 33  | 85  | 45  | F9  | 02  | 7F  | 50  | 3C  | 9F  | A8  
| 07 | 51  | A3  | 40  | 8F  | 92  | 9D  | 38  | F5  | BC  | B6  | DA  | 21  | 10  | FF  | F3  | D2  
| 08 | CD  | 0C  | 13  | EC  | 5F  | 97  | 44  | 17  | C4  | A7  | 7E  | 3D  | 64  | 5D  | 19  | 73  
| 09 | 60  | 81  | 4F  | DC  | 22  | 2A  | 90  | 88  | 46  | EE  | B8  | 14  | DE  | 5E  | 0B  | DB  
| 0A | E0  | 32  | 3A  | 0A  | 49  | 06  | 24  | 5C  | C2  | D3  | AC  | 62  | 91  | 95  | E4  | 79  
| 0B | E7  | C8  | 37  | 6D  | 8D  | D5  | 4E  | A9  | 6C  | 56  | F4  | EA  | 65  | 7A  | AE  | 08  
| 0C | BA  | 78  | 25  | 2E  | 1C  | A6  | B4  | C6  | E8  | DD  | 74  | 1F  | 4B  | BD  | 8B  | 8A  
| 0D | 70  | 3E  | B5  | 66  | 48  | 03  | F6  | 0E  | 61  | 35  | 57  | B9  | 86  | C1  | 1D  | 9E  
| 0E | E1  | F8  | 98  | 11  | 69  | D9  | 8E  | 94  | 9B  | 1E  | 87  | E9  | CE  | 55  | 28  | DF  
| 0F | 8C  | A1  | 89  | 0D  | BF  | E6  | 42  | 68  | 41  | 99  | 2D  | 0F  | B0  | 54  | BB  | 16  

在这里插入图片描述

这里的第一行第一列,数字18,第一个为1(看列对应关系),第二个为8(看行对应关系)。最后结果计算30,把30数据填充上去18的位置。其他的位置替换类似。

行位移

规则

第一行不变
第二行向左循环移动1字节
第三行向做循环移动2字节
第四行向左循环移动3字节

img

列混淆(我自己没有看懂,抄一个博主的)

列混淆是加密过程中最复杂的一块

公式:使用GF(2^8)对[列混淆左乘矩阵的行]与[当前字节的列]进行矩阵乘法

Copy

举例说明

img

上述计算
[x1,y1] = 0x02 × [x1,y1] ⊕ 0x03 × [x2,y1] ⊕ 0x01 × [x3,y1] ⊕ 0x01 × [x4,y1]
[x2,y1] = 0x01 × [x1,y1] ⊕ 0x02 × [x2,y1] ⊕ 0x03 × [x3,y1] ⊕ 0x01 × [x4,y1]
[x3,y3] = 0x01 × [x1,y3] ⊕ 0x01 × [x2,y3] ⊕ 0x02 × [x3,y3] ⊕ 0x03 × [x4,y3]
[x1,y1] = 0x01 × [x1,y4] ⊕ 0x01 × [x2,y4] ⊕ 0x02 × [x3,y4] ⊕ 0x03 × [x4,y4]

Copy

在GF(2^8)中加法和乘法是不一样的

1.加法操作

直接改成异或操作,a+b 等效为 a ⊕ b

2.乘法操作

2.1.定义一个函数f(a)

如果a小于0x80,则返回2*a

否则返货((2*a)mod 0x100) ⊕ 0x1B

2.2乘法操作中的其中一个数值是2的N次方,则可以套用以下公式

0x01 × a = a
0x02 × a = f(a)
0x04 × a = f(0x02 × a)
0x08 × a = f(0x04 × a)
0x10 × a = f(0x08 × a)
...

Copy

2.3.非2的次方可以拆分后相加(这里的相加操作依然为异或操作)

例子

0x0D × a = (0x08 × a) ⊕ (0x04 × a) ⊕ (0x01 × a) = f(0x04 × a)⊕ f(0x02 × a)⊕ a
0x0D × a = (0x08 × a) ⊕ (0x04 × a) ⊕ (0x02 × a) = f(0x04 × a)⊕ f(0x02 × a)⊕ f(a)

Copy

直接计算实际例子

以前面例子中的[x3,y1]为例
[x3,y1] = 0x01 × [x1,y1] ⊕ 0x01 × [x2,y1] ⊕ 0x02 × [x3,y1] ⊕ 0x03 × [x4,y1]
= 0x01 × 0x3B ⊕ 0x01 × 0xF7 ⊕ 0x02 × 0xA8 ⊕ 0x03 × 0xB7
0x01 × 0x3B = 0x3B
0x01 × 0xF7 = 0xF7
0x02 × 0xA8 = f(0xA8) = ((2*0xA8)mod 0x100) ⊕ 0x1B = 0x50 ⊕ 0x1B = 0x4B
0x03 × 0xB7 = f(0xB7) ⊕ 0xB7 = ((2*0xB7)mod 0x100) ⊕ 0x1B ⊕ 0xB7 = 0x75 ⊕ 0xB7 = 0xC2
[x3,y1] = 0x3B ⊕ 0xF7 ⊕ 0x4B ⊕ 0xC2 = 0x45
再举例[x2,y4]
[x2,y4] = 0x01 × [x1,y4] ⊕ 0x02 × [x2,y4] ⊕ 0x03 × [x3,y4] ⊕ 0x01 × [x4,y4]
= 0x01 × 0x27 ⊕ 0x02 × 0x85 ⊕ 0x03 × 0x53 ⊕ 0x01 × 0xD8
0x01 × 0x27 = 0x27
0x02 × 0x85 = f(0x85) = ((2*0x85)mod 0x100) ⊕ 0x1B = A ⊕ 0x1B = 0x11
0x03 × 0x53 = f(0x53) ⊕ 0x53 = (2*0x53) ⊕ 0x53 = A6 ⊕ 0x53 = 0xF5
0x01 × 0xD8 = 0xD8
[x2,y4] = 0x27 ⊕ 0x11 ⊕ 0xF5 ⊕ 0xD8 = 1B

许多内容来源于下面这个链接AES加密和解密流程

【AES算法详解及代码实现】 本菜鸡最近在实际开发项目中,遇到了AES算法,从客户的需求来看主要用于方向盘锁和发动机防盗锁,运用了如下一些加密流程,其中涉及到AES算法,我就饶有兴致的学习了一下,也看了网上的大部分教程,总结了一些自己学习过程中的遇到的重难点,同时也写了一份代码进行加密计算。因为个人觉得计算量太大了,要重复多次,并没有什么必要,完全可以学会一遍流程之后,读懂加密步骤就行了,不必细算具体数值。(本文图片大部分来源于网络) 阅读详情

相关推荐

深入解析BlueZ5与D-Bus:Linux蓝牙开发实战指南

本文深入解析BlueZ5与D-Bus在Linux蓝牙开发中的核心应用,提供从环境搭建到实战开发的完整指南。通过详细代码示例和调试技巧,帮助开发者掌握蓝牙协议栈与D-Bus接口的交互方法,实现高效蓝牙设备管理与GATT服务开发。

weixin_28292761的博客 450

【算法】【AES】加密算法详解

aes加密

jhgj56的博客 1万+

WhatsApp注册流程逆向分析:从协议解析到风控对抗实战

移动应用安全分析的核心在于理解客户端与服务端的交互协议与验证机制。通过逆向工程,可以深入剖析应用的数据加密、传输与身份验证原理,这对于构建安全模型、进行自动化测试和风控策略研究具有重要技术价值。在即时通讯、金融支付等高安全要求场景中,掌握应用注册流程的底层实现是评估其安全性的关键。本文聚焦于使用动态分析工具如Frida进行Hook和流量抓包,结合设备指纹识别与模拟器检测技术,详细解析了大型应用的注册风控体系,为安全研究人员和开发者提供了从环境搭建到实战对抗的完整方法。

weixin_33935636的博客 315

AES对称加密算法

密钥长度越长, 加密的强度越大, 当然与此同时开销也越大。每种类型下都有几种操作模式。

輚至消亡 1万+

基于STM32的简易电压、频率、占空比测量仪

任务详解:我们需要实现三个功能: 第一个是测频率的功能,输入信号为频率为1kHz~10kHz的三种波形(方波、三角波、正弦波),这也是我们最常见的三种波形。幅度是不需要测量的,所以先不关心幅度。 第二个是电压报警功能,当输入信号的幅度超过15V时,我们需要报警(这里我用了一个红色LED当报警器,有条件的还可以加个蜂鸣器)并且把此时的信号幅度显示在OLED屏幕上。 第三个是通信方式的要求,需要有串口通信功能。 第四个是计算占空比的任务,这个任务的输入是幅度为1V~10V、频率为20Hz ~1kHz的方波,需要

weixin_43469377的博客 7251

中移物联ML307C模组OPENCPU开发环境搭建全攻略

本文详细介绍了中移物联ML307C模组OPENCPU开发环境搭建的全过程。从OPENCPU模式的核心优势解析,到SDK获取、Python与scons工具安装,再到解读SDK目录结构与实战编译命令,最后提供常见问题避坑指南,帮助开发者快速构建高效的物联网应用编译环境。

weixin_29168393的博客 742

AES加密算法详解

前言 AES算法是当前最流行的对称加密算法,也是一种分组加密算法,分组密码就是把明文分为固定长度的一组一组,每次加密一组数据,直到加密完整个明文数据。AES算法根据分组长度可以分为AES128, AES192,AES256,其所要求的秘钥长度和加密轮数也各不相同。鉴于这三种模式的算...

leekay123的博客 1万+

一文详解声码器

声码器(Vocoder)是语音信号处理领域的核心技术,其本质是通过“分析 - 参数化 - 合成” 的闭环流程,实现语音的高效编码、转换或生成。它不仅是早期语音通信的关键工具,更是现代 AI 语音技术(如 TTS、语音转换)的核心组件。以下从原理、技术分类、关键模块、应用及发展趋势展开详细解析。

weixin_41413777的博客 1352

【AES加密】AES加密算法流程全解析

本文系统介绍了加密算法的基本概念与分类,重点解析了AES对称加密算法。内容涵盖:1.加密算法定义与分类(对称/非对称);2.对称加密典型算法DES和AES的工作原理及优劣势;3.AES的具体实现,包括128/192/256位密钥的差异、加密轮次、分组处理流程(密钥扩展、初始轮、主轮操作等);4.非对称加密原理及与对称加密的对比;5.混合加密方案的应用场景。文章通过数学示例(RSA算法)和信箱类比,深入浅出地解释了非对称加密的单向安全性原理,最后提出结合两种加密优势的实践方案。

C语言、数据结构、单片机、嵌入式实时操作系统、C++ 学习路径记录 3968

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解

Robot_PLC_HMI_Automation 1万+

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2580

什么是AES加密?详解AES加密算法原理流程

在密码学中,加密算法分为双向加密和单向加密。单向加密包括MD5、SHA等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密,对称加密包括AES加密、DES加密等。双向加密是可逆的,存在密文的密钥。AES算法是DES算法的替代者,也是现在最流行的加密算法之一。下面给大家介绍什么是AES加密算法,以及AES加密算法的原理和流程。

m0_69916115的博客 2万+

《PLECS仿真与实战:从建模到高端应用》-专栏文件目录

《PLECS仿真与实战:从建模到高端应用》是一本系统介绍PLECS电力电子仿真软件的实用指南。全书共10章,首先介绍软件安装与基础操作,包括RC电路仿真等入门内容;随后深入讲解各类电力电子电路的建模与仿真,涵盖整流、交交变换、直流变换、逆变等电路;最后探讨PWM控制建模和直流调速系统等高端应用。书中配有丰富的示例程序和波形分析方法,附录还包含电力电子器件、代码生成等实用资料。该书适合电力电子领域工程师和学生系统学习电路仿真技术。

540

aes解密流程图_AES 加密算法的原理详解

AES加密算法的原理详解AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:下面简单介绍下各个部分的作用与意义:· 明文P没有经过加密的数据。· 密钥K用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发...

weixin_29961459的博客 2066

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

AES加密算法及加解密流程

密钥扩展:与加密过程相同,在解密过程中需要使用相同的密钥扩展算法生成相同的轮密钥。密钥扩展:根据输入的密钥生成一系列轮密钥,这些轮密钥将在后续的轮操作中使用。初始轮:将明文数据按照固定大小(128比特)分块,并与初始密钥进行异或操作。AddRoundKey:将当前轮的轮密钥与数据进行按位异或操作。AddRoundKey:将当前轮的轮密钥与数据进行按位异或操作。初始轮:对加密后的密文数据应用初始密钥进行异或操作。输出密文:经过多轮加密后,得到加密后的密文数据。输出明文:经过多轮解密后,得到解密后的明文数据。

2302_78576669的博客 1607

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RSA + AES加密原理,一线大厂主流的加密手段,流程浅析,有十分详细的测试Demo

既利用了 RSA 的灵活性,可以随时改动 AES 的密钥;又利用了 AES 的高效性,可以高效传输数据。

Java Punk 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

AES加密算法实现流程

 由于AES的数学原理在网上有很多,所以在这里就不再说明,主要是加密流程。先说明一下AES的几个必备参数的初始化typedef struct _AES{  int  Nb;                 //明文或密文的行数  int  Nr;                 //加密或解密时的轮数  int  Nk;                 //密钥的行数   

jiangxinyu的专栏 4523

aes解密流程图_AES加密算法详解

0 AES简介美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128、AES-192和AES-256。本文主要对AES-128进行介绍,另外两种的思路基本一样,只是轮数会适当增加。1 算法流程AES加解密的流程图如下: AES加密过程涉...

weixin_39806288的博客 3418

AES+RSA加密流程

http协议下,结合对称加密和非对称加密完成对传输中数据的加密工作流程。

小米 3937

iOS AES加密流程,AES加密的几个参数

一、 AES加密有很多种组合方式,以下参数: 1、算法模式 2、秘钥长度 3、秘钥 4、秘钥偏移量 5、补码方式 6、加密结果编码方式 参数1:iOS代码中参数:kCCOptionECBMode、貌似iOS只支持ECB模式的,有需求的研究分享一下 参数2:只有2种,128位,或者256位...

chengxunjuan4094的博客 520

AES-GCM加密全流程解析

GCM是一种结合CTR流加密与GHASH认证的AEAD模式,提供机密性、完整性和抗重放攻击保护。其核心流程包括:初始化参数(密钥、Nonce等)、生成认证子密钥H、构造初始计数器J₀、CTR模式加密明文、GHASH认证计算和生成认证标签。关键安全要求包括Nonce不可重用(同一密钥下)、标签长度建议≥96位,并支持硬件加速优化。解密时需严格验证标签一致性,采用恒定时间比较防时序攻击。GCM因其高效性和安全性,被TLS1.3等协议强制采用。

weixin_51663743的博客 2197

AES算法加密流程

整体特点 ①分组密码 明文和密文长度 明文和密文长度128位,密钥长度可变(128/192/256 128/192/256等, 现在选用 128 位)。②面向二进制的密码算法 能够加解密任何形式的计算机数据。③不是对合运算 加解密使用不同的算法。④综合运用多种密码技术 置换、代替、代数⑤整体结构 sp结构,基本轮函数迭代,迭代轮数可变(≥10) 迭代轮数 Rijndael密码算法明文分组长度可变,密钥长度也可变。明文分组长度和密钥长度彼此独立地确定为128、192、256bits,因而Rijn...

qq_40739219的博客 8324
上一篇: 复合查询 --- MySQL总结(五)
下一篇: Sqlite数据库的用法
assibe
博客等级 码龄5年 1640粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值