www.pudn.com > 3d.rar > 3d.m, change:2012-11-07,size:3291b


clear all,clc ; 
g=double(imresize(imread('ColorLena124.bmp'),[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('错误密钥的解密图像')