目录
[4.1 AES 加密算法概述](#4.1 AES 加密算法概述)
[4.2 基于 AES 的遥感图像加密算法原理](#4.2 基于 AES 的遥感图像加密算法原理)
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