💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
一、引言
随着信息技术的飞速发展,数字图像作为信息的重要载体,其安全性问题日益凸显。传统的图像加密方法,如对称密码算法和差分传输技术等,存在密钥空间小、安全性不足等问题,已难以满足当前的安全需求。因此,研究新的图像加密算法,提高图像加密的安全性和抗攻击能力,具有重要的现实意义。
二、混沌系统理论
混沌系统是一类具有不可预测性和高度敏感性的非线性动力系统,适用于图像加密。混沌系统具有以下特点:
- 随机性:混沌系统可以生成具有高度复杂性和随机性的序列,这些序列可以作为加密密钥,增加加密算法的随机性和不可预测性。
- 初值敏感性:混沌系统对初始条件极为敏感,即使初始条件有微小的变化,也会导致系统行为的巨大差异。这一特性使得混沌系统能够生成大量不同的密钥,从而增加加密算法的安全性。
常用的混沌系统包括Logistic混沌系统、Chen混沌系统等。其中,Chen超混沌系统具有更大的密钥空间和更高的系统复杂程度,因此具有更好的加密效果。
三、DNA编码运算
DNA编码技术具有天然的并行性和信息冗余性,适用于图像加密中的信息编码和混淆。DNA由四种脱氧核苷酸组成,分别为腺嘌呤(A)、鸟嘌呤(G)、胞嘧啶(C)、胸腺嘧啶(T)。通过构建DNA序列与二进制序列之间的映射关系,可以将图像的二进制序列转化为DNA序列进行存储和传输,从而增强信息的保密性和隐蔽性。
DNA编码运算包括DNA序列的编码、解码以及基于DNA序列的运算等。这些运算可以利用DNA序列的并行性和信息冗余性,增加加密算法的复杂性和安全性。
四、图像分块加密算法
为了提高加密效果,本研究采用图像分块加密的策略。具体步骤如下:
- 图像预处理:将原始图像转换为二值图像,并划分为多个像素块。
- 密钥生成:利用混沌系统生成多个初始值和控制参数,构成算法的密钥。这些密钥将用于后续的图像加密过程。
- 混沌加密:对每个像素块使用混沌系统生成的混沌序列进行扩散和置乱操作,改变像素值。
- DNA编码运算:将置乱后的像素块转换为DNA序列,并利用不同的混沌序列对DNA序列进行进一步的扩散和置乱操作。
- 图像重构:将经过DNA编码运算的像素块重新组合成加密后的图像。
五、算法性能分析
- 安全性:通过混沌系统和DNA编码运算的结合,增加了加密算法的安全性和复杂性。混沌系统的随机性和不可预测性使得密钥的生成更加安全可靠;而DNA编码运算的并行性和信息冗余性则增强了加密数据的混淆效果。
- 高效性:采用图像分块加密的策略,可以并行处理多个像素块,提高加密效率。同时,由于混沌系统和DNA编码运算的计算量相对较小,因此整个加密过程具有较高的实时性。
- 灵活性:该加密算法支持多种混沌系统和DNA编码运算的选择,可以根据实际需求进行灵活配置。此外,算法还支持不同大小的像素块划分和不同的加密轮数设置,以满足不同应用场景的需求。
六、实验验证与结果分析
通过实验验证,本研究设计的基于混沌系统和DNA编码运算的图像分块加密算法在图像熵、像素相关性和图像复杂性等方面表现出较好的性能。具体结果如下:
- 图像熵:加密后的图像熵值较高,表明加密后的图像信息更加随机和不可预测。
- 像素相关性:加密后的图像像素相关性很低,表明算法具有良好的混淆性。
- 密钥空间:由于采用了高维混沌系统和DNA编码运算的结合,算法的密钥空间大于2^300,具有较高的安全性。
七、结论与展望
本研究设计了一种基于混沌系统和DNA编码运算的图像分块加密算法,该算法具有较高的安全性和实用性,可广泛应用于数字图像通信、医学图像处理、军事保密通信等领域。随着技术的不断发展和完善,相信该技术在未来的信息安全领域将发挥越来越重要的作用。未来可以进一步研究该算法在其他领域的应用,以扩展其实际应用价值。
📚2 运行结果
2.1 加密
2.2 解密
部分代码:
clear;clc;
I=imread('lena.bmp','bmp'); %读取图像信息
figure;imshow(I);title('原始图片');
figure;imhist(I);title('原始图片直方图');
axis([0 255 0 4000]);
[M,N]=size(I); %将图像的行列赋值给M,N
t=4; %分块大小
%% 原始图片信息熵
T1=imhist(I); %统计图像灰度值从0~255的分布情况,存至T1
S1=sum(T1); %计算整幅图像的灰度值
xxs1=0;
for i=1:256
pp1=T1(i)/S1; %每个灰度值占比,即每个灰度值的概率
if pp1~=0
xxs1=xxs1-pp1*log2(pp1);
end
end
%% 原始图像相邻像素相关性分析
%{
先随机在0~M-1行和0~N-1列选中1000个像素点,
计算水平相关性时,选择每个点的相邻的右边的点;
计算垂直相关性时,选择每个点的相邻的下方的点;
计算对角线相关性时,选择每个点的相邻的右下方的点。
%}
NN=1000; %随机取1000对像素点
x1=ceil(rand(1,NN)*(M-1)); %生成1000个1~M-1的随机整数作为行
y1=ceil(rand(1,NN)*(N-1)); %生成1000个1~N-1的随机整数作为列
EX1=0;EY1_SP=0;DX1=0;DY1_SP=0;COVXY1_SP=0; %计算水平相关性时需要的变量
EY1_CZ=0;DY1_CZ=0;COVXY1_CZ=0; %垂直
EY1_DJX=0;DY1_DJX=0;COVXY1_DJX=0; %对角线
I=double(I);
for i=1:NN
%第一个像素点的E,水平、垂直、对角线时计算得出的第一个像素点的E相同,统一用EX1表示
EX1=EX1+I(x1(i),y1(i));
%第二个像素点的E,水平、垂直、对角线的E分别对应EY1_SP、EY1_CZ、EY1_DJX
EY1_SP=EY1_SP+I(x1(i),y1(i)+1);
EY1_CZ=EY1_CZ+I(x1(i)+1,y1(i));
EY1_DJX=EY1_DJX+I(x1(i)+1,y1(i)+1);
end
%统一在循环外除以像素点对数1000,可减少运算次数
EX1=EX1/NN;
EY1_SP=EY1_SP/NN;
EY1_CZ=EY1_CZ/NN;
EY1_DJX=EY1_DJX/NN;
for i=1:NN
%第一个像素点的D,水平、垂直、对角线时计算得出第一个像素点的D相同,统一用DX表示
DX1=DX1+(I(x1(i),y1(i))-EX1)^2;
%第二个像素点的D,水平、垂直、对角线的D分别对应DY1_SP、DY1_CZ、DY1_DJX
DY1_SP=DY1_SP+(I(x1(i),y1(i)+1)-EY1_SP)^2;
DY1_CZ=DY1_CZ+(I(x1(i)+1,y1(i))-EY1_CZ)^2;
DY1_DJX=DY1_DJX+(I(x1(i)+1,y1(i)+1)-EY1_DJX)^2;
%两个相邻像素点相关函数的计算,水平、垂直、对角线
COVXY1_SP=COVXY1_SP+(I(x1(i),y1(i))-EX1)*(I(x1(i),y1(i)+1)-EY1_SP);
COVXY1_CZ=COVXY1_CZ+(I(x1(i),y1(i))-EX1)*(I(x1(i)+1,y1(i))-EY1_CZ);
COVXY1_DJX=COVXY1_DJX+(I(x1(i),y1(i))-EX1)*(I(x1(i)+1,y1(i)+1)-EY1_DJX);
end
%统一在循环外除以像素点对数1000,可减少运算次数
clear;clc;
I=imread('lena.bmp','bmp'); %读取图像信息
figure;imshow(I);title('原始图片');
figure;imhist(I);title('原始图片直方图');
axis([0 255 0 4000]);
[M,N]=size(I); %将图像的行列赋值给M,N
t=4; %分块大小
%% 原始图片信息熵
T1=imhist(I); %统计图像灰度值从0~255的分布情况,存至T1
S1=sum(T1); %计算整幅图像的灰度值
xxs1=0;
for i=1:256
pp1=T1(i)/S1; %每个灰度值占比,即每个灰度值的概率
if pp1~=0
xxs1=xxs1-pp1*log2(pp1);
end
end
%% 原始图像相邻像素相关性分析
%{
先随机在0~M-1行和0~N-1列选中1000个像素点,
计算水平相关性时,选择每个点的相邻的右边的点;
计算垂直相关性时,选择每个点的相邻的下方的点;
计算对角线相关性时,选择每个点的相邻的右下方的点。
%}
NN=1000; %随机取1000对像素点
x1=ceil(rand(1,NN)*(M-1)); %生成1000个1~M-1的随机整数作为行
y1=ceil(rand(1,NN)*(N-1)); %生成1000个1~N-1的随机整数作为列
EX1=0;EY1_SP=0;DX1=0;DY1_SP=0;COVXY1_SP=0; %计算水平相关性时需要的变量
EY1_CZ=0;DY1_CZ=0;COVXY1_CZ=0; %垂直
EY1_DJX=0;DY1_DJX=0;COVXY1_DJX=0; %对角线
I=double(I);
for i=1:NN
%第一个像素点的E,水平、垂直、对角线时计算得出的第一个像素点的E相同,统一用EX1表示
EX1=EX1+I(x1(i),y1(i));
%第二个像素点的E,水平、垂直、对角线的E分别对应EY1_SP、EY1_CZ、EY1_DJX
EY1_SP=EY1_SP+I(x1(i),y1(i)+1);
EY1_CZ=EY1_CZ+I(x1(i)+1,y1(i));
EY1_DJX=EY1_DJX+I(x1(i)+1,y1(i)+1);
end
%统一在循环外除以像素点对数1000,可减少运算次数
EX1=EX1/NN;
EY1_SP=EY1_SP/NN;
EY1_CZ=EY1_CZ/NN;
EY1_DJX=EY1_DJX/NN;
for i=1:NN
%第一个像素点的D,水平、垂直、对角线时计算得出第一个像素点的D相同,统一用DX表示
DX1=DX1+(I(x1(i),y1(i))-EX1)^2;
%第二个像素点的D,水平、垂直、对角线的D分别对应DY1_SP、DY1_CZ、DY1_DJX
DY1_SP=DY1_SP+(I(x1(i),y1(i)+1)-EY1_SP)^2;
DY1_CZ=DY1_CZ+(I(x1(i)+1,y1(i))-EY1_CZ)^2;
DY1_DJX=DY1_DJX+(I(x1(i)+1,y1(i)+1)-EY1_DJX)^2;
%两个相邻像素点相关函数的计算,水平、垂直、对角线
COVXY1_SP=COVXY1_SP+(I(x1(i),y1(i))-EX1)*(I(x1(i),y1(i)+1)-EY1_SP);
COVXY1_CZ=COVXY1_CZ+(I(x1(i),y1(i))-EX1)*(I(x1(i)+1,y1(i))-EY1_CZ);
COVXY1_DJX=COVXY1_DJX+(I(x1(i),y1(i))-EX1)*(I(x1(i)+1,y1(i)+1)-EY1_DJX);
end
%统一在循环外除以像素点对数1000,可减少运算次数
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]王可,张红伟,李晓辉.基于DNA编码运算和混沌系统的图像分块加密算法[J].电视技术, 2017, 41(3):5.
[2]黄迎久,徐扬,李海荣.基于DNA编码和超混沌系统的图像加密算法[J].内蒙古科技大学学报, 2018, 37(3):9.
[3]张迪,夏立伟,张楚谦,等.基于SHA-3与DNA编码混沌系统的输电线路图像加密算法研究[J].科学技术与工程, 2022, 22(36):16075-16083.
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取