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

相关推荐
超级大咸鱼9 小时前
CW信号的正交解调
matlab·verilog·fpga·数字信号·解调·正交解调·cw
乌恩大侠15 小时前
画图,matlab,
开发语言·matlab
吐泡泡科技16 小时前
无人机视频传输系统的通信能耗优化
matlab·通信能耗·无人机通信
达不溜方21 小时前
基于MATLAB的图像增强
开发语言·人工智能·学习·机器学习·matlab·云服务·效率
柳鲲鹏1 天前
GMSSL的不同python版本
加密
信号处理学渣2 天前
matlab的一些时间函数【转】
matlab
IT猿手2 天前
SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
人工智能·深度学习·机器学习·matlab·无人机·智能优化算法
FUXI_Willard3 天前
MATLAB绘图基础12:地理信息可视化
开发语言·matlab·信息可视化
机器学习之心3 天前
轻量级+鲸鱼优化!WOA-LightGBM鲸鱼优化算法优化轻量级梯度提升机分类预测Matlab实现
算法·matlab·分类·鲸鱼优化算法优化·woa-lightgbm·轻量级梯度提升机分类预测
Da_un3 天前
MATLAB引用矩阵元素的几种方法
matlab·矩阵