www.pudn.com > zishiyingjiami.rar > ad.m, change:2012-04-06,size:2182b


clear all; 
clc; 
%function B=LRRLL(A) 
I=imread('lena128.bmp');[m,n]=size(I); 
%分割图片 
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:m/2-1 
       IX=bitxor(IX,I0(i,j)); 
   end 
end 
%用左上角的异或值产生密钥流 
IX=double(IX)/256; 
IX=SC(IX); 
N=mod(round(abs(IX)*12),12);%离散整数密钥流 
for i=1:50 
k=N(i); 
switch k 
       case 0 
           I1=RUTLD(I1);%右上角到左下角扩散加密 
       case 1 
           I1=LDTRU(I1);%左下角到右上角扩散加密 
       case 2 
           I1=LUTRD(I1);%左上角到右下角扩散加密 
       case 3 
           I1=RDTLU(I1);%右下角到左上角扩散加密 
       case 4 
           I1=LTR(I1);%左半部分对右半部分置乱加密 
       case 5 
           I1=RTL(I1);%右半部分对左半部分置乱加密 
       case 6 
           I1=UTD(I1);%上半部分对下半部分置乱加密 
       case 7 
           I1=DTU(I1);%下半部分对上半部分置乱加密 
       case 8 
           I1=HUD(I1);%从上到下行扩散加密 
       case 9 
           I1=HDU(I1);%从下到上行扩散加密 
       case 10 
           I1=LLR(I1);%从左到右列扩散加密 
       case 11 
           I1=LRL(I1);%从右到左列扩散加密 
   end   
end 
figure(1) 
imshow(uint8(I1));title('加密'); 
%计算左下角加密后的异或值 
IXX=0; 
for i=1:m/2-1 
   for j=1:m/2-1 
       IXX=bitxor(IXX,I0(i,j)); 
   end 
end 
%用左下角加密后的异或值产生解密密钥流 
IXX=double(IXX)/256; 
IXX=SC(IXX); 
N2=mod(round(abs(IXX)*12),12);%离散整数解密密钥流 
for i=50:-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   
figure(2) 
imshow(uint8(I1));title('解密');