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

目录

1.程序功能描述

2.测试软件版本以及运行结果展示

3.核心程序

4.本算法原理

[4.1 AES 加密算法概述](#4.1 AES 加密算法概述)

[4.2 基于 AES 的遥感图像加密算法原理](#4.2 基于 AES 的遥感图像加密算法原理)

5.完整程序


1.程序功能描述

通过AES算法对遥感图像进行加密和解密,分析加解密处理后图像的直方图,相关性,熵,解密后图像质量等。

2.测试软件版本以及运行结果展示

MATLAB2022A版本运行

3.核心程序

Image_RGB           = rgb2gray(I);
Image_RGB           = imresize(Image_RGB,[256,256]);

figure;
subplot(131);
imshow(Image_RGB,[]);
title(['原图']);


[rr,cc] = size(Image_RGB);
 
for i = 1:rr/16
    for j = 1:cc
        M_data2{i,j} = Image_RGB(16*(i-1)+1:16*i , j);
    end
end

%设置密钥
key_hex = {'00' '01' '02' '03' '04' '05' '06' '07' '08' '09' '0a' '0b' '0c' '0d' '0e' '0f'};
%AES初始化

[SBOX,invSBOX,w,polys,invpolys] = func_AES_parameter(key_hex); 

%加密处理
for i = 1:rr/16
    for j = 1:cc
        images_AES{i,j} = func_AES(double(M_data2{i,j}),w,SBOX,polys,1);
    end
end

%显示加密后的图像
for i = 1:rr/16
    for j = 1:cc
        tmp                           = (images_AES{i,j})';
        iamges_aes(16*(i-1)+1:16*i,j) = double(tmp);
    end
end
 
subplot(132);
imshow(iamges_aes,[]);
title(['加密图']);


[rr,cc] = size(Image_RGB);
%解密处理
for i = 1:rr/16
    for j = 1:cc
        images_deAES{i,j} = func_invAES(images_AES{i,j},w,invSBOX,invpolys,1);
    end
end 
%显示解密后的图像
for i = 1:rr/16
    for j = 1:cc
        tmp                             = (images_deAES{i,j})';
        iamges_deaes(16*(i-1)+1:16*i,j) = double(tmp);
    end
end

subplot(133);
imshow(iamges_deaes,[]);
title(['解密图']);


PSNR = psnr(uint8(Image_RGB), uint8(iamges_deaes))
29_005_1m

4.本算法原理

随着遥感技术的不断发展,遥感图像在军事、环境监测、资源勘探等领域发挥着越来越重要的作用。然而,由于遥感图像通常包含大量敏感信息,如地理坐标、军事设施等,因此对其进行安全有效的加密成为了一个至关重要的问题。高级加密标准(Advanced Encryption Standard,AES)作为一种广泛应用的对称加密算法,具有加密速度快、安全性高的特点,非常适合用于遥感图像的加密。

4.1 AES 加密算法概述

AES 是一种分组密码算法,它将明文分成固定长度的分组,然后对每个分组进行加密。AES 的分组长度可以是 128 位、192 位或 256 位,密钥长度也可以是 128 位、192 位或 256 位。AES 算法主要由以下几个部分组成:

字节替换(SubBytes)

行移位(ShiftRows)

列混合(MixColumns)

轮密钥加(AddRoundKey)

AES 加密算法通常进行多轮迭代,每一轮都包括上述四个操作。在最后一轮中,不进行列混合操作。

4.2 基于 AES 的遥感图像加密算法原理

将遥感图像转换为二维矩阵形式。假设图像的大小为 M×N,将其表示为一个 M×N 的矩阵 I。然后,对矩阵 I 进行灰度化处理,将其转换为灰度图像。灰度化处理可以采用加权平均法,即对于彩色图像的每个像素点,根据其 RGB 分量的值计算出一个灰度值。设像素点的 RGB 分量分别为 R、G、B,则灰度值 Gray = 0.299R + 0.587G + 0.114B。最后,将灰度图像的像素值进行归一化处理,使其取值范围在[0, 1]之间。归一化处理可以采用公式:Gray_norm = Gray / 255。

AES 加密过程

密钥生成:选择一个合适的密钥长度,如 128 位或 256 位。使用密钥生成算法生成一个密钥 K。

分组处理:将预处理后的图像矩阵 I 按照 AES 的分组长度进行分组。如果图像的大小不是分组长度的整数倍,则需要进行填充处理,使图像的大小能够被分组长度整除。

轮密钥扩展:根据密钥 K,使用轮密钥扩展算法生成多个轮密钥。轮密钥的数量取决于 AES 的加密轮数和密钥长度。

加密迭代:对每个图像分组进行多轮加密迭代。每一轮加密包括以下四个步骤:

字节替换(SubBytes):使用一个 S 盒(Substitution Box)对每个字节进行替换操作。S 盒是一个 16×16 的矩阵,它将输入的字节映射为另一个字节。设输入字节为 x,则替换后的字节为 S[x]。

行移位(ShiftRows):将矩阵的每一行进行循环移位操作。第 0 行不进行移位,第 1 行循环左移 1 个字节,第 2 行循环左移 2 个字节,第 3 行循环左移 3 个字节。

列混合(MixColumns):对矩阵的每一列进行线性变换操作。设矩阵的一列向量为 [s0, s1, s2, s3],则经过列混合后的向量为 [s'0, s'1, s'2, s'3],其中:

s'0 = (2s0 + 3s1 + 1s2 + 1s3) mod 256

s'1 = (1s0 + 2s1 + 3s2 + 1s3) mod 256

s'2 = (1s0 + 1s1 + 2s2 + 3s3) mod 256

s'3 = (3s0 + 1s1 + 1s2 + 2s3) mod 256

轮密钥加(AddRoundKey):将当前轮的轮密钥与矩阵进行异或操作。设矩阵为 A,轮密钥为 K,则异或后的矩阵为 A ⊕ K。

5.完整程序

VVV

相关推荐
Evand J7 小时前
集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码
matlab·平面·目标跟踪
我是博博啦12 小时前
matlab例题
人工智能·算法·matlab
2402_8713219513 小时前
MATLAB方程组
gpt·学习·线性代数·算法·matlab
Matlab程序猿小助手1 天前
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·嵌入式硬件·算法·matlab·机器人·无人机
Matlab精灵2 天前
使用MATLAB进行字符串处理
开发语言·matlab
机器学习之心2 天前
POD-Transformer多变量回归预测(Matlab)
matlab·回归·transformer·pod-transformer
WangYan20222 天前
高光谱遥感是什么?高光谱遥感数据如何处理?(基于Matlab和Python多案例解析)从小白到精通
matlab·高光谱遥感数据处理·混合像元分解
Matlab精灵2 天前
利用Matlab函数实现深度学习算法
深度学习·算法·matlab
十七算法实验室3 天前
Matlab实现北方苍鹰优化算法优化随机森林算法模型 (NGO-RF)(附源码)
开发语言·深度学习·算法·决策树·随机森林·机器学习·matlab
mailangduoduo3 天前
基于matlab的语音信号去噪的App Designer 设计
matlab·gui设计·语音去噪·app设计