混沌映射和DNA加密的图像加密算法详解
本文介绍一种基于混沌映射和DNA加密的图像加密算法,该算法通过对图像进行分块、DNA编码、运算、置乱等步骤,最终实现图像的加密。
算法步骤
-
分块和DNA编码
- 将原始图像的R通道进行分块,并按照X、Y、Z、H四个参数进行DNA编码和运算,得到四个加密后的图像Q1、Q2、Q3、Q4。
- 对原始图像的G、B通道按照和R通道相同的方式进行分块和加密,得到另外三个加密后的图像。
-
合并图像
- 将四个加密后的图像合并成一个矩阵Q_jiami。
-
混沌映射和置乱
- 使用混沌映射生成随机序列。
- 按照随机序列对Q_jiami进行行列置换,实现Zigzag逆置乱。
-
显示加密图像
- 将置换后的Q_jiami分别显示出来,得到四个加密后的图像。
-
保存加密图像
- 最后,将四个加密后的图像保存在Q_jiami中。
代码示例
X=mod(round(X*10^4),8)+1;
Y=mod(round(Y*10^4),8)+1;
Z=mod(round(Z*10^4),4);
H=mod(round(H*10^4),8)+1;
e=N/t; %e表示每一行可以分为多少块
Q2=DNA_bian(fenkuai(t,R,1),Y(1));
%图片1
Q1_1=DNA_bian(fenkuai(t,I1,1),X(1));
Q_last_1=DNA_yunsuan(Q1_1,Q2,Z(1));
Q_1(1:t,1:t)=DNA_jie(Q_last_1,H(1));
%图片2
Q1_2=DNA_bian(fenkuai(t,I2,1),X(1));
Q_last_2=DNA_yunsuan(Q1_2,Q2,Z(1));
Q_2(1:t,1:t)=DNA_jie(Q_last_2,H(1));
%图片3
Q1_3=DNA_bian(fenkuai(t,I3,1),X(1));
Q_last_3=DNA_yunsuan(Q1_3,Q2,Z(1));
Q_3(1:t,1:t)=DNA_jie(Q_last_3,H(1));
%图片4
Q1_4=DNA_bian(fenkuai(t,I4,1),X(1));
Q_last_4=DNA_yunsuan(Q1_4,Q2,Z(1));
Q_4(1:t,1:t)=DNA_jie(Q_last_4,H(1));
for i=2:r
Q1_1=DNA_bian(fenkuai(t,I1,i),X(i)); %对原始图像R通道每一个分块按X对应的序号进行DNA编码
Q1_2=DNA_bian(fenkuai(t,I2,i),X(i));
Q1_3=DNA_bian(fenkuai(t,I3,i),X(i));
Q1_4=DNA_bian(fenkuai(t,I4,i),X(i));
Q2=DNA_bian(fenkuai(t,R,i),Y(i)); %对R的每一个分块按Y对应的序号进行DNA编码
%图片1
Q3_1=DNA_yunsuan(Q1_1,Q2,Z(i)); %对上面两个编码好的块按Z对应的序号进行DNA运算
Q4_1=DNA_yunsuan(Q3_1,Q_last_1,Z(i)); %运算结果在和前一块按Z对应的序号再一次进行运算,称为扩散
Q_last_1=Q4_1;
%图片2
Q3_2=DNA_yunsuan(Q1_2,Q2,Z(i));
Q4_2=DNA_yunsuan(Q3_2,Q_last_2,Z(i));
Q_last_2=Q4_2;
%图片3
Q3_3=DNA_yunsuan(Q1_3,Q2,Z(i));
Q4_3=DNA_yunsuan(Q3_3,Q_last_3,Z(i));
Q_last_3=Q4_3;
%图片4
Q3_4=DNA_yunsuan(Q1_4,Q2,Z(i));
Q4_4=DNA_yunsuan(Q3_4,Q_last_4,Z(i));
Q_last_4=Q4_4;
xx=floor(i/e)+1;
yy=mod(i,e);
if yy==0
xx=xx-1;
yy=e;
end
Q_1((xx-1)*t+1:xx*t,(yy-1)*t+1:yy*t)=DNA_jie(Q4_1,H(i)); %将每一块合并成完整的图Q
Q_2((xx-1)*t+1:xx*t,(yy-1)*t+1:yy*t)=DNA_jie(Q4_2,H(i));
Q_3((xx-1)*t+1:xx*t,(yy-1)*t+1:yy*t)=DNA_jie(Q4_3,H(i));
Q_4((xx-1)*t+1:xx*t,(yy-1)*t+1:yy*t)=DNA_jie(Q4_4,H(i));
end
Q_1=uint8(Q_1);
Q_2=uint8(Q_2);
Q_3=uint8(Q_3);
Q_4=uint8(Q_4);
Q_jiami(:,:,1) = Q_1; %将四个矩阵存入Q中
Q_jiami(:,:,2) = Q_2;
Q_jiami(:,:,3) = Q_3;
Q_jiami(:,:,4) = Q_4;
xx0=sum(I2(:))/(255*SUM);
xx0=floor(xx0*10^4)/10^4;
xx1=sum(I3(:))/(255*SUM);
xx1=floor(xx1*10^4)/10^4;
ppx=zeros(1,M+1000);
ppy=zeros(1,N+1000);
ppx(1)=xx0;
ppy(1)=xx1;
for i=1:M+999 %进行SUM+999次循环,共得到SUM+1000点(包括初值)
ppx(i+1)=u*ppx(i)*(1-ppx(i));
end
for i=1:N+999 %进行SUM+999次循环,共得到SUM+1000点(包括初值)
ppy(i+1)=u*ppy(i)*(1-ppy(i));
end
ppx=ppx(1001:length(ppx)); %去除前1000点,获得更好的随机性
ppy=ppy(1001:length(ppy));
[~,Ux]=sort(ppx,'descend');
[~,Uy]=sort(ppy,'descend');
for i=1:M
temp = Q_1(i,:);
Q_1(i,:) = Q_1(Ux(i),:);
Q_1(Ux(i),:) = temp;
temp = Q_2(i,:);
Q_2(i,:) = Q_2(Ux(i),:);
Q_2(Ux(i),:) = temp;
temp = Q_3(i,:);
Q_3(i,:) = Q_3(Ux(i),:);
Q_3(Ux(i),:) = temp;
temp = Q_4(i,:);
Q_4(i,:) = Q_4(Ux(i),:);
Q_4(Ux(i),:) = temp;
end
for i=1:N
temp = Q_1(:,i);
Q_1(:,i) = Q_1(:,Uy(i));
Q_1(:,Uy(i)) = temp;
temp = Q_2(:,i);
Q_2(:,i) = Q_2(:,Uy(i));
Q_2(:,Uy(i)) = temp;
temp = Q_3(:,i);
Q_3(:,i) = Q_3(:,Uy(i));
Q_3(:,Uy(i)) = temp;
temp = Q_4(:,i);
Q_4(:,i) = Q_4(:,Uy(i));
Q_4(:,Uy(i)) = temp;
end
figure;subplot(2,2,1);imshow(I1,[]);subplot(2,2,2);subplot(2,2,3);imshow(Q_1,[]);subplot(2,2,4);
axis([0 255 0 2000]);
figure;subplot(2,2,1);imshow(I2,[]);subplot(2,2,2);subplot(2,2,3);imshow(Q_2,[]);subplot(2,2,4);
axis([0 255 0 2000]);
figure;subplot(2,2,1);imshow(I3,[]);subplot(2,2,2)subplot(2,2,3);imshow(Q_3,[])
axis([0 255 0 2000]);
figure;subplot(2,2,1);imshow(I4,[]);subplot(2,2,2);subplot(2,2,3);imshow(Q_4,[])
axis([0 255 0 2000]);
Q_jiami(:,:,1)=Q_1;
Q_jiami(:,:,2)=Q_2;
Q_jiami(:,:,3)=Q_3;
Q_jiami(:,:,4)=Q_4;
代码解释
X=mod(round(X*10^4),8)+1;等代码片段用于生成用于DNA编码的参数。Q2=DNA_bian(fenkuai(t,R,1),Y(1));等代码片段用于对图像进行分块并进行DNA编码和运算。xx0=sum(I2(:))/(255*SUM);等代码片段用于生成混沌映射的初始值。ppx(i+1)=u*ppx(i)*(1-ppx(i));等代码片段用于生成混沌映射序列。[~,Ux]=sort(ppx,'descend');等代码片段用于对混沌映射序列进行排序并获取排序后的索引。temp = Q_1(i,:); Q_1(i,:) = Q_1(Ux(i),:); Q_1(Ux(i),:) = temp;等代码片段用于对Q_jiami进行行列置乱。
Zigzag逆置乱
Zigzag逆置乱体现在对Q_jiami进行行列置换的过程,该过程通过对混沌映射序列排序并获取索引,然后按照索引对Q_jiami进行重排,从而实现类似Zigzag的置乱效果。
总结
该算法使用混沌映射和DNA加密对图像进行加密,通过分块、DNA编码、运算、置乱等步骤,最终实现图像的加密。该算法具有较高的安全性和效率,可用于图像安全保护等领域。
原文地址: https://www.cveoy.top/t/topic/n0jc 著作权归作者所有。请勿转载和采集!