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

相关推荐
远望清一色1 小时前
基于MATLAB多参数结合火焰识别系统
图像处理·matlab
梦想科研社8 小时前
【无人机设计与控制】红嘴蓝鹊优化器RBMO求解无人机路径规划MATLAB
开发语言·matlab·无人机
网络研究院1 天前
新工具可绕过 Google Chrome 的新 Cookie 加密系统
前端·chrome·系统·漏洞·加密·绕过
远望清一色1 天前
基于小波变换图像去噪MATLAB实现
开发语言·matlab
通信仿真实验室2 天前
(51)MATLAB迫零均衡器系统建模与性能仿真
matlab·信号处理·仿真·通信系统·均衡·通信算法
机器学习之心2 天前
分类预测 | WOA-LightGBM基于鲸鱼算法优化轻量级梯度提升机算法数据分类预测Matlab程序
算法·matlab·分类·woa-lightgbm·轻量级梯度提升机算法
逆风远航2 天前
MATLAB生态环境数据处理与分析
开发语言·matlab·生态学·生态环境·环境科学
梦里水乡8572 天前
MATLAB车道检测与跟踪
人工智能·计算机视觉·matlab
阿W呀2 天前
【Matlab】基于Prandtl−Ishlinskii的迟滞模型-RLS辨识
开发语言·matlab
梦里水乡8572 天前
MATLAB+opencv人脸疲劳检测
开发语言·opencv·matlab