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

📄 jinhua.m

📁 数字图象加密程序(编写的数字图象加密程序)
💻 M
字号:
clear all;

Image=double(imread('e:\work\lena.jpg'));
Yimage=Image;
s=3;
z=0;
o=0;
Ih=size(Image,1);%图像的长度
Iw=size(Image,2);%图像的宽度
Biao=(Ih*Iw)/256;
Junfang=double(zeros(1,s));
% for(i=1:256)
%     for(j=1:128)
%         Image(i,j)=0;
%     end
%     for(j=129:256)
%         Image(i,j)=255;
%     end
% end
for(t=1:s)
figure(t)
subplot(3,2,1)
imshow(Image,[]);%显示原始图像
title('原始图像');
Image=uint8(Image);
figure(t)
subplot(3,2,2)
imhist(Image);
title('原始图像的直方图');
True=double(zeros(1,256));
key=double(input('请输入加密密钥:','s'));%输入任意位密钥,为安全起见,密钥长度不得少于四位

len=length(key);

while(mod(len,4)~=0)%密钥位数不是4的倍数则程序自动取固定值补足末几位
    len=len+1;
    key(len)=15;%程序自动补足默认值为15
end

N=len/4;%四个密钥为一组,共N组
for(i=1:Ih)
    for(j=1:Iw)
        Imagebak(i,j)=Image(i,j);
    end
end

for(n=1:N)
    select=mod(key((n-1)*4+1),4);%四种参数取法,每种取法有两个独立参数
    switch(select)
    case 0
        a=1;
		b=mod(key((n-1)*4+2),Ih);   
		c=mod(key((n-1)*4+3),Ih);   
		d=mod((b*c+1),Ih);
    case 1
		a=mod(key((n-1)*4+2),Ih);
		b=1;
		c=mod(a*mod(key((n-1)*4+3),Ih)-1,Ih);
		d=mod(key((n-1)*4+3),Ih);
   	case 2
        a=mod(key((n-1)*4+2),Ih);
		b=mod(a*mod(key((n-1)*4+3),Ih)-1,Ih);
		c=1;
		d=mod(key((n-1)*4+3),Ih);
    case 3
		a=mod(key((n-1)*4+2),Ih)*mod(key((n-1)*4+3),Ih);
		b=mod(key((n-1)*4+2),Ih);
		c=mod(key((n-1)*4+3),Ih);
		d=1;
    end%这四种取法使猫映射为保面积映射,即映射矩阵行列式为1
    
    iterative=mod(key((n-1)*4+4),17);%每组迭代次数
    
    if(iterative<10)
        iterative=iterative+10;%为防止迭代次数过多或过少,取模17后的值,但若小于10则要加上10
    end	
    
    for(i=1:Ih)
        for(j=1:Iw)
            absc=i;
            ordi=j;
            for(k=1:iterative)
                absc1=mod((a*absc+b*ordi),Ih)+1;
				ordi1=mod((c*absc+d*ordi),Iw)+1;
				absc=absc1;
				ordi=ordi1;
% 				imagebak[i][j]=(image[i][j]+G*abs(absc-ordi))%256;
            end
            Enimage(absc1,ordi1)=Imagebak(i,j);
        end
    end
    for(i=1:Ih)
        for(j=1:Iw)
            Imagebak(i,j)=Enimage(i,j);
        end
    end
end


figure(t)
subplot(3,2,3)
imshow(Enimage,[]);
title('交叉后加密图像');
Enimage=uint8(Enimage);
figure(t)
subplot(3,2,4)
imhist(Enimage);
title('交叉加密图像的直方图');
Enimage=double(Enimage);


key1=4;
key2=0.3;
Kimage=double(zeros(size(Image)));
Image=double(Image);
key3=0;
% Himage=zeros(size(Image));

% Ih=size(Image,1);%图像的长度
% Iw=size(Image,2);%图像的宽度
% Kimage(1)=key2;
for(i=1:Ih)
        for(j=1:Iw)
            key2=key1*(key2*(1-key2));
            key3=mod((key2*256),256);
            Kimage(i,j)=round(key3); 
            Image(i,j)=mod((Kimage(i,j)+Enimage(i,j)),256);
             for(k=1:256)
                if(Image(i,j)==(k-1))
                    True(k)=True(k)+1;
                end
%             break
            
            end
        end
end

% for(i=1:Ih)
%         for(j=1:Iw)
%              
%          end
% end
     
% Image=mod((Kimage+Image),256);
figure(t)
subplot(3,2,5)
imshow(Image,[]);
title('变异后加密图像');
Image=uint8(Image);
figure(t)
subplot(3,2,6)
imhist(Image);
title('变异加密图像的直方图');




%    for(i=1:Ih)
%         for(j=1:Iw)
%             
%         end
%     end
  for(k=1:256) 
      True(k)=(True(k)-Biao)^2;
      Junfang(t)=Junfang(t)+True(k);
  end
  
end
for(k=1:s)
      Junfang(k)=Junfang(k)/(Ih*Iw);
end





% for(v=1:s)
% key1=4;
% key2=0.3;
% figure(v+t)
% subplot(3,2,1)
% imshow(Image,[]);%显示原始图像
% title('加密图像');
% Image=uint8(Image);
% figure(v+t)
% subplot(3,2,2)
% imhist(Image);
% title('加密图像的直方图');
% Kimage=double(zeros(size(Image)));
% Image=double(Image);
% key3=0;
% % Himage=zeros(size(Image));
% 
% % Ih=size(Image,1);%图像的长度
% % Iw=size(Image,2);%图像的宽度
% % Kimage(1)=key2;
% for(i=1:Ih)
%         for(j=1:Iw)
%             key2=key1*(key2*(1-key2));
%             key3=mod((key2*256),256);
%             Kimage(i,j)=round(key3);            
%         end
% end
% 
% for(i=1:Ih)
%         for(j=1:Iw)
%              Image(i,j)=mod((Image(i,j)-Kimage(i,j)),256);
%          end
% end
%      
% % Image=mod((Kimage+Image),256);
% figure(v+t)
% subplot(3,2,3)
% imshow(Image,[]);
% title('变异解密后图像');
% Image=uint8(Image);
% figure(v+t)
% subplot(3,2,4)
% imhist(Image);
% Image=double(Image);
% title('变异解密图像的直方图');
% %    for(i=1:Ih)
% %         for(j=1:Iw)
% %             for(k=1:256)
% %                 if(Image(i,j)==(k-1))
% %                     True(k)=True(k)+1;
% %                 end
% % %             break
% %             
% %             end
% %         end
% %     end
% %   for(k=1:256) 
% %       True(k)=(True(k)-Biao)^2;
% %       Junfang(t)=Junfang(t)+True(k);
% %   end
% %   
% % end
% % for(k=1:1)
% %       Junfang(k)=Junfang(k)/(Ih*Iw);
% % end
% 
% 
% 
% 
% % figure(2)
% % subplot(3,2,5)
% % imshow(Image,[]);
% % title('加密图像');
% % 
% % Ih=size(Image,1);
% % Iw=size(Image,2);
% 
% 
% key=double(input('请输入解密密钥:','s'));
% 
% len=length(key);
% 
% while(mod(len,4)~=0)
%     len=len+1;
%     key(len)=15;
% end
% 
% N=len/4;
% for(i=1:Ih)
%     for(j=1:Iw)
%         Imagebak(i,j)=Image(i,j);
%     end
% end
% 
% for(n=N:-1:1)
%     select=mod(key((n-1)*4+1),4);
%     switch(select)
%     case 0
%         a=1;
% 		b=mod(key((n-1)*4+2),Ih);   
% 		c=mod(key((n-1)*4+3),Ih);   
% 		d=mod((b*c+1),Ih);
%     case 1
% 		a=mod(key((n-1)*4+2),Ih);
% 		b=1;
% 		c=mod(a*mod(key((n-1)*4+3),Ih)-1,Ih);
% 		d=mod(key((n-1)*4+3),Ih);
%    	case 2
%         a=mod(key((n-1)*4+2),Ih);
% 		b=mod(a*mod(key((n-1)*4+3),Ih)-1,Ih);
% 		c=1;
% 		d=mod(key((n-1)*4+3),Ih);
%     case 3
% 		a=mod(key((n-1)*4+2),Ih)*mod(key((n-1)*4+3),Ih);
% 		b=mod(key((n-1)*4+2),Ih);
% 		c=mod(key((n-1)*4+3),Ih);
% 		d=1;
%     end
%     
%     iterative=mod(key((n-1)*4+4),17);
%     
%     if(iterative<10)
%         iterative=iterative+10;%为防止迭代次数过多或过少,取模17后的值,但若小于10则要加上10
%     end	
%     
%     for(i=1:Ih)
%         for(j=1:Iw)
%             absc=i-1;
%             ordi=j-1;
%             for(k=1:iterative)
%                 absc1=mod((d*absc-b*ordi),Ih);
% 				ordi1=mod((a*ordi-c*absc),Iw);
%                 if(absc1==0)
%                     absc1=Ih;
%                 end
%                 if(ordi1==0)
%                     ordi1=Iw;
%                 end
% 				absc=absc1-1;
% 				ordi=ordi1-1;
% % 				imagebak[i][j]=(image[i][j]+G*abs(absc-ordi))%256;
%             end
%             Deimage(absc1,ordi1)=Imagebak(i,j);
%         end
%     end
%     for(i=1:Ih)
%         for(j=1:Iw)
%             Imagebak(i,j)=Deimage(i,j);
%         end
%     end
% end
% 
% 
% figure(v+t)
% subplot(3,2,5)
% imshow(Deimage,[]);
% title('还原图像');
% 
% Deimage=uint8(Deimage);
% figure(v+t)
% subplot(3,2,6)
% imhist(Deimage);
% title('解密图像的直方图');
% Deimage=double(Deimage);
% Image=Deimage;
% end
% 
% % imwrite(Deimage,'Detest.bmp','bmp');
% 
% for(i=1:Ih)
%     for(j=1:Iw)
%         if(Yimage(i,j)==Image(i,j))
%             o=o+1;
%         else
%             z=z+1;
%         end
%     end
% end

⌨️ 快捷键说明

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