基于AES的图像加解密算法matlab仿真

目录

✨1.前言

📡2.算法测试效果图预览

🔍3.算法运行软件版本

✅4.部分核心程序

🚀5.算法理论概述

[5.1 密钥扩展](#5.1 密钥扩展)

[5.2 AES核心分组加密变换](#5.2 AES核心分组加密变换)

1.轮密钥加

2.字节代换

3.行移位

4.列混合

[5.3 密文重构与图像生成](#5.3 密文重构与图像生成)

💡6.算法完整程序工程


✨1.前言

基于AES的图像加解密核心逻辑为:先将图像解析为一维字节数据流,按照16字节为单位划分加密分组,使用AES标准轮函数完成逐分组加密,最终重组字节流得到加密图像;解密过程为加密的逆运算,利用相同密钥对密文字节流反向运算,还原原始像素数据与图像。本文以应用最广的AES-128(密钥长度128位,共10轮加密运算)为基础,完整拆解算法原理、执行流程,并配套对应数学公式,同时结合图像数据特性说明适配逻辑。

📡2.算法测试效果图预览

🔍3.算法运行软件版本

matlab2024B

✅4.部分核心程序

% 定义函数func_SBOX,输入为vargin,输出为S盒SBOX及其逆S盒invSBOX

function SBOX,invSBOX = func_SBOX(vargin)

% 定义模多项式,这是AES算法中用于有限域GF(2^8)运算的不可约多项式

mod_pol = bin2dec('100011011');

% 初始化逆元数组,第一个元素为0(通常在AES中0没有逆元)

inverse(1) = 0;

% 计算1到255的所有非零元素的逆元

for i = 1 : 255

% 调用func_inverse函数计算i的逆元,并存入inverse数组

inverse(i+1) = func_inverse(i, mod_pol);

end

% 构建S盒

for i = 1 : 256

% 调用func_aff函数计算逆元inverse(i)的仿射变换,并存入S盒SBOX

SBOX(i) = func_aff(inverse(i));

end

% 计算S盒的逆S盒invSBOX

invSBOX = func_INV_SBOX(SBOX);

end

🚀5.算法理论概述

AES属于对称分组密码,加密与解密使用完全相同的密钥,仅运算顺序与逆变换存在差异。AES-128规定:分组长度128位、密钥长度128位,整体包含初始轮密钥加、9轮完整加密轮、1轮收尾轮,总计10轮变换。

AES的所有运算均基于有限域GF (2⁸)展开,这是整个算法的数学基础。计算机中单个字节为8位二进制数,取值范围0~255,恰好对应GF (2⁸)中的元素。有限域GF(2⁸)定义了字节之间的加法、乘法规则,区别于传统十进制运算,也是 AES 非线性混淆、线性扩散的核心支撑。

图像数据与AES的适配规则:单通道灰度图像每个像素占1字节(8 位),彩色RGB图像单个像素占3字节(24位)。无论哪种图像,都会先将二维像素矩阵按行优先转换为一维字节数组,再以16字节(128位)为一个分组进行切割。若图像总字节数无法被16整除,需在末尾补充填充字节,解密后再剔除填充数据,保证图像完整性。

5.1 密钥扩展

AES-128原始密钥为16字节(128位),记原始密钥数组Key=k0​,k1​,...,k15​。加密共11组轮密钥(初始1组+10轮运算各1组),每组轮密钥16字节,密钥扩展的作用是由原始密钥生成全部轮密钥,运算基于字(4字节为1字)操作。

定义字wi​=k4i​,k4i+1​,k4i+2​,k4i+3​,16 字节原始密钥分为4个字w0​,w1​,w2​,w3​,最终需生成44个字(w0​∼w43​)。密钥扩展分为两种递推规则:

其中RotWord为字循环左移1字节,SubWord为对字内4个字节分别做字节代换,Rcon为轮常量数组,是GF(2⁸)下的固定常量,用于打破密钥的线性规律。密钥扩展完成后,按每4个字拼接为16字节轮密钥,供每一轮加密使用。

5.2 AES核心分组加密变换

AES-128加密流程:初始轮密钥加→9轮(字节代换+行移位+列混合+轮密钥加)→第10轮(字节代换+行移位+轮密钥加)(第10轮无列混合)。

1.轮密钥加

该变换将当前4×4状态矩阵与对应轮密钥逐字节做GF(2⁸)加法,是每一轮必有的基础操作。设状态矩阵元素为staterc,轮密钥矩阵元素为keyrc,r∈{0,1,2,3}为行号,c∈{0,1,2,3}为列号,运算公式:

初始轮密钥加使用第1组轮密钥,后续每一轮依次使用后续轮密钥。该操作实现密钥与明文数据的混合,增加加密随机性。

2.字节代换

字节代换是AES唯一的非线性变换,依靠固定S盒(替换表)完成单字节映射,破坏数据线性特征,抵抗线性密码分析。状态矩阵中每一个字节独立完成代换,设原字节为x,代换后字节为y:

S盒的底层数学实现分为两步:首先求字节x在GF(2⁸)中的乘法逆元x−1(规定0的逆元为0),再对逆元做仿射变换,仿射变换公式:

字节代换作用于状态矩阵所有元素,完成后矩阵尺寸保持4×4不变。

3.行移位

行移位是线性移位变换,对状态矩阵的每一行执行循环左移,目的是实现同行数据的横向扩散。4 行移位规则固定:第0行不移位,第1行左移1字节,第2行左移2字节,第3行左移3字节。设原矩阵第r行第c列元素为staterc,移位后元素为state′rc,公式:

行移位将单个像素对应的字节分散到不同列,为后续列混合的全局扩散打下基础。

4.列混合

列混合是高强度线性扩散变换,对状态矩阵的每一列独立运算,将一列4个字节线性组合,让单个字节的变化扩散到整列,是 AES 实现雪崩效应的核心。该运算基于GF(2⁸)乘法与加法,设原始列向量为a=a0​,a1​,a2​,a3​T,变换后列向量为b=b0​,b1​,b2​,b3​T,固定变换矩阵与运算公式:

矩阵中010203均为GF(2⁸)中的常量,乘法遵循有限域乘法规则。列混合仅在前9轮加密中使用,最后一轮加密省略该变换。

5.3 密文重构与图像生成

所有16字节分组完成AES加密后,将每个4×4状态矩阵还原为16字节一维数组,按分组顺序拼接为完整密文字节流。剔除预处理阶段的填充字节,将一维密文字节流重新还原为二维像素矩阵,最后写入图像文件,得到加密后的图像。加密后的图像像素完全随机,视觉上呈现杂乱噪点,无法识别原始内容。

💡6.算法完整程序工程

OOOOO

OOO

O

关注GZH后输入回复:0048

相关推荐
2zcode17 小时前
免费开源项目文档:基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
gihigo199821 小时前
FastSLAM2.0(精度优于1.0)MATLAB 实现
开发语言·matlab
foundbug9991 天前
Polar Code 编解码 MATLAB 实现
开发语言·算法·matlab
2zcode1 天前
基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
2zcode2 天前
基于MATLAB图像处理的水果识别与分类系统设计与实现
图像处理·matlab·分类
matlab代码2 天前
基于matlab人脸疲劳驾驶检测系统(可使用其它人脸视频)【源码39期】
开发语言·matlab·人脸疲劳检测
matlab代码2 天前
基于matlab人脸门禁识别系统(可增加其它人脸图像)源码40期】
开发语言·matlab·人脸识别·人脸门禁
民乐团扒谱机2 天前
【微实验】从迷雾中看清世界:卡尔曼滤波的数学诗意与MATLAB实践
人工智能·算法·matlab·卡尔曼滤波·kalman
2zcode2 天前
基于MATLAB图像处理的细胞检测与计数分析系统设计与实现
图像处理·人工智能·matlab
2zcode2 天前
免费开源项目文档:基于MATLAB图像处理的水果识别与品质分级系统设计与实现
图像处理·计算机视觉·matlab