⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hundun.m

📁 基于三维混沌序列的数字图像加密算法,是一种比较复杂的加密算法
💻 M
字号:
clear all,clc
g=double(imresize(imread('lena.tif'),[128,128]));
[m,n]=size(g);
h=0.001;    %lorenz混沌序列初始化
x=zeros(1,40001);x(1)=1;
y=zeros(1,40001);y(1)=1;
z=zeros(1,40001);z(1)=1;
%for i=1:40000         %产生lorenz混沌序列初始化,欧拉法
  % x(i+1)=x(i)+h*(10*(y(i)-x(i)));
  % y(i+1)=y(i)+h*(28*x(i)-x(i)*z(i)-y(i));
  % z(i+1)=z(i)+h*(x(i)*y(i)-8/3*z(i));
  %end
  t(1)=0; 
 for i=1:40000
     t(k+1)=t(k)+h; 
     if t(k) 
         k1=-0.1*x(k);
         k2=-0.1*(x(k)+h*k1/3); 
k3=-0.1*(x(k)+(-k1+3*k2)*h/3); 
k4=-0.1*(x(k)+(k1-k2+k3)*h); 
k5=-0.1*(x(k)+(k1+3*k2+3*k3+k4)*h/8); 
x(k+1)=x(k)+(k1+3*k2+3*k3+k4)*h/8; 

     
x(i+1)=x(i)+h*(
for i=1:40000  %对3个序列进行改进
    x(i)=x(i)*1000000-round(x(i)*1000000);
    y(i)=y(i)*1000000-round(y(i)*1000000);
    z(i)=z(i)*1000000-round(z(i)*1000000);
end
for j=1:n  %用位异或法对像素进行置乱
 h=double(uint8((m*n*(x(n+j)+0.5))*ones(m,1)));
 g1(:,j)=bitxor(g(:,j),h);
 k1(:,j)=bitxor(g1(:,j),h); %对像素置乱进行解密
end
for i=1:m  %对行进行置乱
 t(1:n)=y(1:n);
 [t1,p] =sort(t(1:n));%按由小到大的顺序生成新序列t1,位置为p(排序后的项在原来序列中的位置索引)
 t1=flipud(t1);%按由大到小的顺序生成新序列t1
 g2(i,:)=g1(i,p);%按指定的新位置IX重新赋给
 k2(i,p)=g2(i,:);
end
for j=1:n    %列置乱
   t(1:m)=z(1:m);
   [t1,p] =sort(t(1:m));%按由小到大的顺序生成新序列t1,位置为p
   p=flipud(p);
   g3(:,j)=g2(p,j);%用该列的第pi行替换该列的第i行
   k3(p,j)=g3(:,j);%用该列的第pi行重新替换该列的第i行,解密
end
for i=1:m  %对行进行解密
 t(1:n)=y(1:n);
 [t1,p] =sort(t(1:n));%按由小到大的顺序生成新序列t1,位置为p(排序后的项在原来序列中的位置索引)
 t1=flipud(t1);%按由大到小的顺序生成新序列t1
  k2(i,p)=k3(i,:);
end
for j=1:n  %用位异或法对像素进行解密
 h=double(uint8((m*n*(x(n+j)+0.5))*ones(m,1)));
 k1(:,j)=bitxor(k2(:,j),h); %对像素置乱进行解密
end

h=0.001
x=zeros(1,40001);x(1)=1.01;%密钥错误时进行解密
y=zeros(1,40001);y(1)=1;
z=zeros(1,40001);z(1)=1;
for i=1:40000         %产生lorenz混沌序列初始化,欧拉法
   x(i+1)=x(i)+h*(10*(y(i)-x(i)));
   y(i+1)=y(i)+h*(28*x(i)-x(i)*z(i)-y(i));
   z(i+1)=z(i)+h*(x(i)*y(i)-8/3*z(i));
end
for i=1:40000  %对3个序列进行改进
    x(i)=x(i)*1000000-round(x(i)*1000000);
    y(i)=y(i)*1000000-round(y(i)*1000000);
    z(i)=z(i)*1000000-round(z(i)*1000000);
end
for j=1:n    %列置乱
   t(1:m)=z(1:m);
   [t1,p] =sort(t(1:m));%按由小到大的顺序生成新序列t1,位置为p
   p=flipud(p);
  %g3(:,j)=g2(p,j);%用该列的第pi行替换该列的第i行
   w3(p,j)=g3(:,j);%用该列的第pi行重新替换该列的第i行,解密
end
for i=1:m  %对行进行解密
 t(1:n)=y(1:n);
 [t1,p] =sort(t(1:n));%按由小到大的顺序生成新序列t1,位置为p(排序后的项在原来序列中的位置索引)
 t1=flipud(t1);%按由大到小的顺序生成新序列t1
  w2(i,p)=w3(i,:);
end
for j=1:n  %用位异或法对像素进行解密
 h=double(uint8((m*n*(x(n+j)+0.5))*ones(m,1)));
 w1(:,j)=bitxor(w2(:,j),h); %对像素置乱进行解密
end


subplot(221),imshow(g,[]),xlabel('原图像');
subplot(222),imshow(g3,[]),xlabel('加密图像')
subplot(223),imshow(k1,[]),xlabel('正确密钥的解密图像')
subplot(224),imshow(w1,[]),xlabel('错误密钥的解密图像')        
        
        
        
        
        
        
        
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -