AES算法

收集了几个博主

1、https://blog.csdn.net/shaosunrise/article/details/80219950

2、AESECB加密算法 C 语言代码实现_c语言aes-256-cbc-CSDN博客

3、https://www.cnblogs.com/hello-/articles/8718186.html

4、AES加密过程详解-CSDN博客

5、AES加密算法原理的详细介绍与实现-CSDN博客

6、AES加密的四种模式详解 - 程序员大本营

前言

1、AES算法是当前最流行的对称加密算法,也是一种分组加密算法,分组密码就是把明文分为固定长度的16个字节,每次加密一组数据,直到加密完整个明文数据。加密出来的密文也是16字节;注意:加密出来的是0xff占用一个字节的数,是不可打印字符;

2、aes算法接口需要一般几个参数:16字节的一个数组输入参数,16字节字符数组的带存储加密数据的参数,一个数组key;例如unsigned char pt[16]={0x00, 0x11, 0x22, 0x33,0x44, 0x55,0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xff}; unsigned char pt[16]={0}; unsigned char key[16]={0x00, 0x11, 0x22, 0x33,0x44, 0x55,0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xff};

3、AES算法根据密钥分组长度16,32,64字节可以分为AES128, AES192,AES256,其所要求的秘钥长度和加密轮数也各不相同。鉴于这三种模式的算法在本质上没有区别,所以本文主要介绍AES-128(数据分组为16字节,秘钥长度为16字节,加密轮数为10轮),并给出C语言实现。

AES 密钥长度(32位比特字) 分组长度(32位比特字) 加密轮数
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

确切的说分组密码只是规定了怎么加密一组明文,如果明文数据比较长,其他的组需要怎么进行加密取决于使用何种分组密码工作模式。对于AES-128而言,每次只加密16字节长度的数据,如果明文长度为32字节话,我们很容易想到第2组16字节可以仿照第1组16字节数据进行处理,这就是最简单的分组密码工作模式ECB(电子密码本)模式,本文主要讲述AES算法实现,对于长数据也是使用这种最简单的ECB分组处理方式,更多其他分组密码工作模式,请参考另一篇文章图解分组密码五大工作模式。

前面讨论的数据长度都是16字节,或者其整倍数长度的加密算法实现,对于数据长度不是分组长度整倍数的情形,通常需要对数据进行填充,使其长度达到分组长度的整倍数再来进行加密。对于数据长度不足分组长度整倍数使用何种格式进行数据填充有多种不同的填充标准,比如在数据后面填充二进制的0x0,直到达到要求的长度,这就是ZeroPadding方式;比如数据缺少几位就填充二进制的几,例如缺少4位填充0x04 0x04 0x04 0x04,这就是PKCS7/PKCS5填充方式。本文提供的实现不涉及数据填充,假定明文数据都是16字节的整倍数长度。

AES算法流程

AES算法主要可以分为秘钥扩展、字节替换、行移位、列混合和轮秘钥加这5个步骤。

秘钥扩展(KeyExpansions:给定的初始秘钥一般比较短,比如16字节,而算法如果进行10轮运算的话就需要16x(10+1)字节长度的秘钥,需要对原始秘钥进行秘钥扩展。

字节替换(SubBytes):一个非线性的替换步骤,根据查表把一个字节替换为另一个字节。

行移位(ShiftRows):将数据矩阵的每一行循环移位一定长度。

列混合(MixColumns):将数据矩阵乘以一个固定的矩阵,增加混淆程度。

轮秘钥加(AddRoundKey):将数据矩阵与秘钥矩阵进行异或操作。

相关推荐
汀、人工智能2 小时前
[特殊字符] 第21课:最长有效括号
数据结构·算法·数据库架构·图论·bfs·最长有效括号
Boop_wu2 小时前
[Java 算法] 字符串
linux·运维·服务器·数据结构·算法·leetcode
故事和你913 小时前
洛谷-算法1-2-排序2
开发语言·数据结构·c++·算法·动态规划·图论
Fcy6483 小时前
算法基础详解(三)前缀和与差分算法
算法·前缀和·差分
kvo7f2JTy3 小时前
基于机器学习算法的web入侵检测系统设计与实现
前端·算法·机器学习
List<String> error_P4 小时前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
流云鹤5 小时前
Codeforces Round 1090 (Div. 4)
c++·算法
wljy15 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
清空mega6 小时前
C++中关于数学的一些语法回忆(2)
开发语言·c++·算法
香蕉鼠片6 小时前
数据结构八股(一)
数据结构·算法