1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于混沌的一般彩色图像加密算法的Matlab实现

基于混沌的一般彩色图像加密算法的Matlab实现

时间:2020-09-15 18:03:39

相关推荐

基于混沌的一般彩色图像加密算法的Matlab实现

目录

基于混沌的一般彩色图像加密算法的Matlab实现Matlab代码(密文无损压缩图像保存)加解密效果

基于混沌的一般彩色图像加密算法的Matlab实现

说明:

混沌系统使用Loren连续混沌系统,使用四阶龙格库塔法将其离散化加密方法使用基于空域的像素置乱-扩散结构密文只能以无损压缩方式保存或分发,例如.bmp

Matlab代码(密文无损压缩图像保存)

clc;clear;close all;P=imread('房屋.tiff'); %载入图片figure;subplot(1,3,1);imshow(uint8(P));title('房屋明文');P_R=P(:,:,1);P_G=P(:,:,2);P_B=P(:,:,3);[M,N]=size(P_R); %计算图片P尺寸大小P=double(P); %将图像转化为双精度类型%% 第一部分%产生混沌随机序列n=2*M*N;%计算所需要的序列长度h=0.002; t=800; a=10; b=8/3; c=28; r =-1; x0=1.1; y0=2.2; z0=3.3; w0=4.4;s=zeros(1,n);tic;%利用四阶龙格库塔法将超Lorenz混沌系统离散化的计算过程for i=1:n+tK11=a*(y0-x0);%x0表示xiK12=a*(y0-(x0+K11*h/2))+w0;K13=a*(y0-(x0+K12*h/2))+w0;K14=a*(y0-(x0+K13*h))+w0;x1=x0+(K11+2*K12+2*K13+K14)*h/6; %x1表示xi+1K21=c*x1-y0-x1*z0;K22=c*x1-(y0+K21*h/2)-x1*z0;K23=c*x1-(y0+K22*h/2)-x1*z0;K24=c*x1-(y0+K23*h)-x1*z0;y1=y0+(K21+2*K22+2*K23+K24)*h/6; K31=x1*y1-b*z0;K32=x1*y1-b*(z0+K31*h/2);K33=x1*y1-b*(z0+K32*h/2);K34=x1*y1-b*(z0+K33*h);z1=z0+(K31+2*K32+2*K33+K34)*h/6;K41=-y1*z1-r*w0;K42=-y1*z1+r*(w0+K41*h/2);K43=-y1*z1+r*(w0+K42*h/2);K44=-y1*z1+r*(w0+K43*h);w1=z0+(K41+2*K42+2*K43+K44)*h/6;%把第i次的输出送给第i+1次的输入x0=x1;y0=y1;z0=z1;w0=w1; %每3000次迭代后对混沌状态x0进行小的扰动if i>ts(i-t)=x1;if mod((i-t),3000)==0x0=x0+h*sin(x0);endendend%%%s转化为整数类型的伪随机序列X,长度为M*N,整数不大于10*max(M,N)X=mod(floor((s+100)*10^10),10*max(M,N))+1;%用序列s生成2*M*N的扩散伪随机序列SS=mod(floor(s*pow2(16)),256);%%a=X(1:M*N);%用向量X生成M*N的置乱伪随机序列a,bb=X(M*N+1:2*M*N);S1=S(1:M*N); %用于正向扩散的伪随机序列,即密码S2=S(M*N+1:2*M*N); %用于逆向扩散的伪随机序列,即密码%% 加密算法%置乱,利用Arnold矩阵对图像A置乱A=P_R(:); %将图像分量P_R分量转化成一维向量Afor i=1:M*Nq=mod(b(i)+a(i)*i,M*N)+1;% q是变换后的坐标A_i=A(i);A(i)=A(q);A(q)=A_i;endA=reshape(A,M,N); %密文A%%正向扩散,基于异或运算的扩散处理A=A(:); %将图像矩阵转为一维向量AB0=0;%正向扩散密钥B=zeros(1,M*N);%正向扩散结果B(1)=bitxor(bitxor(B0,S1(1)),A(1));for i=2:M*NB(i)=bitxor(bitxor(B(i-1),S1(i)),A(i));end%逆向扩散C0=0;%逆向扩散密钥C=zeros(1,M*N);%逆向扩散结果C(M*N)=bitxor(bitxor(C0,S2(M*N)),B(M*N));for i=M*N-1:-1:1C(i)=bitxor(bitxor(C(i+1),S2(i)),B(i)); endC_R=reshape(C,M,N); %密文图像分量C_RA=P_G(:); %将分量P_G转化成一维向量Afor i=1:M*Nq=mod(b(i)+a(i)*i,M*N)+1;% q是变换后的坐标A_i=A(i);A(i)=A(q);A(q)=A_i;endA=reshape(A,M,N); %密文A%正向扩散,基于异或运算的扩散处理A=A(:); %将图像矩阵转为一维向量AB0=0;%正向扩散密钥B=zeros(1,M*N);%正向扩散结果B(1)=bitxor(bitxor(B0,S1(1)),A(1));for i=2:M*NB(i)=bitxor(bitxor(B(i-1),S1(i)),A(i));end%逆向扩散C0=0;%逆向扩散密钥C=zeros(1,M*N);%逆向扩散结果C(M*N)=bitxor(bitxor(C0,S2(M*N)),B(M*N));for i=M*N-1:-1:1C(i)=bitxor(bitxor(C(i+1),S2(i)),B(i)); endC_G=reshape(C,M,N); %密文图像分量C_GA=P_B(:); %将图像分量P_B转化成一维向量Afor i=1:M*Nq=mod(b(i)+a(i)*i,M*N)+1;% q是变换后的坐标A_i=A(i);A(i)=A(q);A(q)=A_i;endA=reshape(A,M,N); %密文A%扩散,基于异或运算的扩散处理A=A(:); %将图像矩阵转为一维向量AB0=0;%正向扩散密钥B=zeros(1,M*N);%正向扩散结果B(1)=bitxor(bitxor(B0,S1(1)),A(1));for i=2:M*NB(i)=bitxor(bitxor(B(i-1),S1(i)),A(i));end%逆向扩散C0=0;%逆向扩散密钥C=zeros(1,M*N);%逆向扩散结果C(M*N)=bitxor(bitxor(C0,S2(M*N)),B(M*N));for i=M*N-1:-1:1C(i)=bitxor(bitxor(C(i+1),S2(i)),B(i)); endC_B=reshape(C,M,N); %密文图像分量C_B%% 密文C=cat(3,C_R,C_G,C_B);subplot(1,3,2);imshow(uint8(C));title('房屋密文');imwrite(uint8(C),'房屋密文.bmp'); %以无损压缩方法保存密文% imwrite(uint8(C),'房屋密文.jp2','CompressionRatio',5); %以有损压缩方法保存密文%% 解密算法C=imread('房屋密文.bmp');% C=imread('房屋密文.jp2');C_R=C(:,:,1);C_G=C(:,:,2);C_B=C(:,:,3);%图像解密处理%逆向扩散还原C=C_R(:);D0=0;D=zeros(1,M*N);D(M*N)=bitxor(bitxor(D0,S2(M*N)),C(M*N));for i=M*N-1:-1:1D(i)=bitxor(bitxor(C(i+1),S2(i)),C(i));end%正向扩散还原图像E0=0;E=zeros(1,M*N);E(1)=bitxor(bitxor(E0,S1(1)),D(1));for i=2:M*NE(i)=bitxor(bitxor(D(i-1),S1(i)),D(i)); endE=reshape(E,M,N); %解密明文E%置乱还原F=E(:);for i=M*N:-1:1q=mod(b(i)+a(i)*i,M*N)+1;% q是变换后的坐标F_i=F(i);F(i)=F(q);F(q)=F_i;endF_R=reshape(F,M,N);C=C_G(:);D0=0;D=zeros(1,M*N);D(M*N)=bitxor(bitxor(D0,S2(M*N)),C(M*N));for i=M*N-1:-1:1D(i)=bitxor(bitxor(C(i+1),S2(i)),C(i));end%正向扩散还原图像E0=0;E=zeros(1,M*N);E(1)=bitxor(bitxor(E0,S1(1)),D(1));for i=2:M*NE(i)=bitxor(bitxor(D(i-1),S1(i)),D(i)); endE=reshape(E,M,N); %解密明文E%置乱还原F=E(:);for i=M*N:-1:1q=mod(b(i)+a(i)*i,M*N)+1;% q是变换后的坐标F_i=F(i);F(i)=F(q);F(q)=F_i;endF_G=reshape(F,M,N);C=C_B(:);D0=0;D=zeros(1,M*N);D(M*N)=bitxor(bitxor(D0,S2(M*N)),C(M*N));for i=M*N-1:-1:1D(i)=bitxor(bitxor(C(i+1),S2(i)),C(i));end%正向扩散还原图像E0=0;E=zeros(1,M*N);E(1)=bitxor(bitxor(E0,S1(1)),D(1));for i=2:M*NE(i)=bitxor(bitxor(D(i-1),S1(i)),D(i)); endE=reshape(E,M,N); %解密明文E%置乱还原F=E(:);for i=M*N:-1:1q=mod(b(i)+a(i)*i,M*N)+1;% q是变换后的坐标F_i=F(i);F(i)=F(q);F(q)=F_i;endF_B=reshape(F,M,N);%% 解密明文F=cat(3,F_R,F_G,F_B);toc; %关闭秒表计数器subplot(1,3,3);imshow(uint8(F));title('房屋密文解密图像')imwrite(uint8(F),'房屋密文解密.bmp');%以无损压缩方法保存图像% imwrite(uint8(F),'房屋密文解密.jp2','Mode','lossless');%以有损压缩方法保存密文

加解密效果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。