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 pt16={0x00, 0x11, 0x22, 0x33,0x44, 0x55,0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xff}; unsigned char pt16={0}; unsigned char key16={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):将数据矩阵与秘钥矩阵进行异或操作。

相关推荐
爱睡懒觉的焦糖玛奇朵4 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具Dataset Cleaner】
人工智能·python·学习·算法·yolo·音视频
xjxijd4 小时前
行为感知算法赋能运维,提前预判硬件故障与异常访问
运维·算法
江屿风4 小时前
C++图论基础拓扑排序经典OJ题流食般投喂
开发语言·c++·笔记·算法·图论
C+-C资深大佬4 小时前
C++ 数字与字符串互转
java·c++·算法
满怀冰雪4 小时前
第12篇-二分答案法-当答案不好求时如何反向搜索
java·算法
KaMeidebaby4 小时前
卡梅德生物技术快报|兔单克隆抗体应用实战:禽源病原 IFA 检测全流程拆解
前端·人工智能·物联网·算法·百度
CC数学建模4 小时前
2026年第十六届APMCM 亚太地区大学生数学建模竞赛(中文赛项)赛题A题:自来水厂水质预测与评估完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
折哥的程序人生 · 物流技术专研12 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
想吃火锅100513 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
云絮.15 小时前
数据库操作
数据库·mysql·算法·oracle