📄 hundun.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 + -