www.pudn.com > zishiyingjiami.rar > CCde.m, change:2012-05-30,size:3998b


function I=CCde(I) 
%第三种顺序解密 
[m,n]=size(I);l=10 
%分割图片 
I0(1:m/2,1:n/2)=I(1:m/2,1:n/2);            %左上角 
I1(1:m/2,1:n/2)=I(1:m/2,n/2+1:n);          %右上角 
I2(1:m/2,1:n/2)=I(m/2+1:m,n/2+1:n);        %右下角 
I3(1:m/2,1:n/2)=I(m/2+1:m,1:n/2);          %左下角 
%解密左上角 
%计算左下角加密后的异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:n/2-1 
       IX=bitxor(IX,I2(i,j)); 
   end 
end 
%用左下角加密后的异或值产生解密密钥流 
IXX=double(IX)/256; 
IXX=SC(IXX); 
N2=mod(round(abs(IXX)*12),12);%离散整数密钥流 
for i=l:-1:1 
k=N2(i); 
switch k 
       case 0 
           I0=LDTRUJ(I0); 
       case 1 
           I0=RUTLDJ(I0); 
       case 2 
           I0=RDTLUJ(I0); 
       case 3 
           I0=LUTRDJ(I0); 
       case 4 
           I0=LTRJ(I0); 
       case 5 
           I0=RTLJ(I0); 
       case 6 
           I0=UTDJ(I0); 
       case 7 
           I0=DTUJ(I0); 
       case 8 
           I0=HDUJ(I0); 
       case 9 
           I0=HUDJ(I0); 
       case 10 
           I0=LRLJ(I0); 
       case 11 
           I0=LLRJ(I0); 
   end   
end   
for i=1:m 
    for j=1:n 
        I(1:m/2,1:n/2)=I0(1:m/2,1:n/2);   %左上角解密结果 
    end 
end 
% figure(5);imshow(uint8(I));title('解密1'); 
%解密左下角 
%计算右上角加密后的异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:n/2-1 
       IX=bitxor(IX,I3(i,j)); 
   end 
end 
%用右上角加密后的异或值产生解密密钥流 
IXX=double(IX)/256; 
IXX=SC(IXX); 
N2=mod(round(abs(IXX)*12),12);%离散整数密钥流 
for i=l:-1:1 
k=N2(i); 
switch k 
       case 0 
           I2=LDTRUJ(I2); 
       case 1 
           I2=RUTLDJ(I2); 
       case 2 
           I2=RDTLUJ(I2); 
       case 3 
           I2=LUTRDJ(I2); 
       case 4 
           I2=LTRJ(I2); 
       case 5 
           I2=RTLJ(I2); 
       case 6 
           I2=UTDJ(I2); 
       case 7 
           I2=DTUJ(I2); 
       case 8 
           I2=HDUJ(I2); 
       case 9 
           I2=HUDJ(I2); 
       case 10 
           I2=LRLJ(I2); 
       case 11 
           I2=LLRJ(I2); 
   end   
end   
for i=1:m 
    for j=1:n 
        I(m/2+1:m,n/2+1:n)=I2(1:m/2,1:n/2);   %左下角解密结果 
    end 
end 
% figure(6);imshow(uint8(I));title('解密2'); 
%解密右上角 
%计算右下角加密后的异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:n/2-1 
       IX=bitxor(IX,I1(i,j)); 
   end 
end 
%用右上角加密后的异或值产生解密密钥流 
IXX=double(IX)/256; 
IXX=SC(IXX); 
N2=mod(round(abs(IXX)*12),12);%离散整数密钥流 
for i=l:-1:1 
k=N2(i); 
switch k 
       case 0 
           I3=LDTRUJ(I3); 
       case 1 
           I3=RUTLDJ(I3); 
       case 2 
           I3=RDTLUJ(I3); 
       case 3 
           I3=LUTRDJ(I3); 
       case 4 
           I3=LTRJ(I3); 
       case 5 
           I3=RTLJ(I3); 
       case 6 
           I3=UTDJ(I3); 
       case 7 
           I3=DTUJ(I3); 
       case 8 
           I3=HDUJ(I3); 
       case 9 
           I3=HUDJ(I3); 
       case 10 
           I3=LRLJ(I3); 
       case 11 
           I3=LLRJ(I3); 
   end   
end   
for i=1:m 
    for j=1:n 
        I(m/2+1:m,1:n/2)=I3(1:m/2,1:n/2);   %右上角解密结果 
    end 
end 
% figure(7);imshow(uint8(I));title('解密3'); 
%解密右下角 
%计算左上角异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:n/2-1 
       IX=bitxor(IX,I0(i,j)); 
   end 
end 
%用右上角加密后的异或值产生解密密钥流 
IXX=double(IX)/256; 
IXX=SC(IXX); 
N2=mod(round(abs(IXX)*12),12);%离散整数密钥流 
for i=l:-1:1 
k=N2(i); 
switch k 
       case 0 
           I1=LDTRUJ(I1); 
       case 1 
           I1=RUTLDJ(I1); 
       case 2 
           I1=RDTLUJ(I1); 
       case 3 
           I1=LUTRDJ(I1); 
       case 4 
           I1=LTRJ(I1); 
       case 5 
           I1=RTLJ(I1); 
       case 6 
           I1=UTDJ(I1); 
       case 7 
           I1=DTUJ(I1); 
       case 8 
           I1=HDUJ(I1); 
       case 9 
           I1=HUDJ(I1); 
       case 10 
           I1=LRLJ(I1); 
       case 11 
           I1=LLRJ(I1); 
   end   
end   
for i=1:m 
    for j=1:n 
        I(1:m/2,n/2+1:n)=I1(1:m/2,1:n/2);   %右下角解密结果 
    end 
end 
% figure(8);imshow(uint8(I));title('解密4');