clear;close; disp('请输入密钥:'); x(1)=input('请输入第一个密钥: '); y(1)=input('请输入第二个密钥: '); z(1)=input('请输入第三个密钥: '); disp('加密中...'); f=imread('test2.bmp'); %读取图像 [M,N]=size(f); N=N/3; sigma=10;r=28;b=8/3; %三维的lorenz混沌映射生成混沌序列 [x,y,z]=lorentz(M*N,0,sigma,r,b,x(1),y(1),z(1),0.01); [m1,num1]=sort(x); %混沌序列升序排列以及生成位置矩阵 [m2,num2]=sort(y); [m3,num3]=sort(z); fr=f(:,:,1); %图像的R分量矩阵 fg=f(:,:,2); %图像的G分量矩阵 fb=f(:,:,3); %图像的B分量矩阵 ff1r=uint8(zeros(M,N)); ff1g=uint8(zeros(M,N)); ff1b=uint8(zeros(M,N)); ff2r=uint8(zeros(M,N)); ff2g=uint8(zeros(M,N)); ff2b=uint8(zeros(M,N)); ffr=uint8(zeros(M,N)); ffg=uint8(zeros(M,N)); ffb=uint8(zeros(M,N)); m1=mod(1000*m1,256); %混沌序列转为二进制 m1=uint8(m1); m2=mod(1000*m2,256); m2=uint8(m2); m3=mod(1000*m3,256); m3=uint8(m3); for i=1:M*N %加密 ff1r(i)=fr(num1(i)); %位置置乱 ff1g(i)=fg(num2(i)); ff1b(i)=fb(num3(i)); ffr(i)=bitxor(ff1r(i),m1(i)); %改变像素值 ffg(i)=bitxor(ff1g(i),m2(i)); ffb(i)=bitxor(ff1b(i),m3(i)); end ff(:,:,1)=ffr;ff(:,:,2)=ffg;ff(:,:,3)=ffb; %生成加密图像 imshow(ff);title('加密图像'); fffr=uint8(zeros(M,N)); fffg=uint8(zeros(M,N)); fffb=uint8(zeros(M,N)); for i=1:M*N %解密 ff2r(i)=bitxor(ffr(i),m1(i)); %生成原图像像素值 ff2g(i)=bitxor(ffg(i),m2(i)); ff2b(i)=bitxor(ffb(i),m3(i)); fffr(num1(i))=ff2r(i); %改变位置到原来的位置 fffg(num2(i))=ff2g(i); fffb(num3(i))=ff2b(i); end fff(:,:,1)=fffr;fff(:,:,2)=fffg;fff(:,:,3)=fffb; %生成解密图像 figure imshow(fff);title('解密图像'); %生成分析图 figure;subplot(2,1,1);imhist(fr);title('加密前R分量直方图');subplot(2,1,2);imhist(ffr);title('加密后R分量直方图'); figure;subplot(2,1,1);imhist(fg);title('加密前G分量直方图');subplot(2,1,2);imhist(ffg);title('加密后G分量直方图'); figure;subplot(2,1,1);imhist(fb);title('加密前B分量直方图');subplot(2,1,2);imhist(ffb);title('加密后B分量直方图');
2021-04-06 09:44:12 520KB hslogic chao混沌
1