基于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

相关推荐
foundbug99914 小时前
实现MATLAB滚动轴承故障诊断
开发语言·matlab
gihigo199814 小时前
matlab实现三维四面体单元的有限元解法
开发语言·matlab
fengfuyao98514 小时前
Chen混沌系统 — 基于自适应控制的MATLAB仿真实现
开发语言·机器学习·matlab
chao18984414 小时前
基于压缩感知的SAR图像处理MATLAB实现方案
图像处理·人工智能·matlab
yong999014 小时前
MATLAB的卷积码的编码和译码的实现
开发语言·matlab
hoiii18715 小时前
matlab基础贝叶斯变换的压缩感知
算法·机器学习·matlab
吃好睡好便好21 小时前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
吃好睡好便好1 天前
创建魔方矩阵和单位矩阵
开发语言·人工智能·学习·线性代数·matlab·矩阵
吃好睡好便好1 天前
矩阵的加减运算
开发语言·人工智能·学习·线性代数·算法·matlab·矩阵