www.pudn.com > cat.rar > main.m


%%%%%%%%%%%%%%%%%%%%%%%%%   初始化  密钥是n1,n2,x1(0),x2(0) ********************** 
clc 
close all 
clear all 
t=cputime; 
n1=1;            %设置密钥******************************************************* 
n2=1;             %设置密钥********************************************* 
x1(1)=0.2;        %设置密钥;产生a值序列*********************888     
x3(1)=0.25;          %设置密钥产生b值序列 
B=16;                 %设置对原图像分块的记数 
u=4; 
%××××××××××××××××××××产生a,b值×88888888888888888888888888888888888 
%%%%%                n1整个图像置乱迭代次数,n2各个分块迭代次数 
 
for i=2:(101+B^2)%B^2原图被分的块数,多产生的混沌序列已备其混沌特性不好从第101个数开始取用 
    x1(i)=u*x1(i-1)*(1-x1(i-1)); 
    x3(i)=u*x1(i-1)*(1-x1(i-1)); 
end  
    for i=1:B^2+1 
        x2(i)=fix(x1(100+i)*10000)-fix(x1(100+i)*10)*1000; 
        x4(i)=fix(x1(100+i)*10000)-fix(x1(100+i)*10)*1000; 
        x22(i)=mod(x2(i),256)+1;%a值序列 
        x44(i)=mod(x2(i),256)+1;%b值序列 
    end 
   %************************************对整个图像做ARNOLD映射*************************************  
    originimage=imread('lena.bmp');    %%%%%%%%一定是方阵,读入加密图像******************* 
    origin=rgb2gray(originimage); 
    M=length(origin); 
    subplot(1,3,1),imshow(origin),title('加密前的图像');  
    lastimage1=cat(x22(1),x44(1),origin,n1);% 对整个图像做ARNOLD映射后的密图为lastimage1 
     subplot(1,3,2),imshow( lastimage1),title('整体加密后的图像'); 
       imwrite( lastimage1,'linac.bmp','bmp'); 
    %*********************************对各个分块加密置乱**************************** 
    k1=1; 
    k2=0; 
        for Q=1:B^2 
              k2=k2+1; 
            if k2==B+1 
                k1=k1+1; 
                k2=1; 
            end 
            partimage=qukuai(lastimage1,k1,k2,B);     %对图像取分块函数 
            partlast=cat(x22(Q+1),x44(Q+1),partimage,n2);%对分块做映射 
            %将置乱后的分块放在加密图像的指定位置上 
            for i=1:M/B 
              for  j=1:M/B 
            lastimage2(B*(i-1)+k1,B*(j-1)+k2)=partlast(i,j);% lastimage2最终加密后的图像 
              end 
            end 
        end 
     subplot(1,3,3),imshow(lastimage2),title('最终加密后的图像');  
     imwrite( lastimage2,'linacc.bmp','bmp'); 
    e=cputime-t