www.pudn.com > zishiyingjiami.rar > LRRLL.asv, change:2012-04-06,size:8732b


close 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 
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(1),subplot(2,2,1);imshow(uint8(I));title('加密1'); 
%加密右下角 
%计算右上角加密后的异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:m/2-1 
       IX=bitxor(IX,I1(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 
           I2=RUTLD(I2);%右上角到左下角扩散加密 
       case 1 
           I2=LDTRU(I2);%左下角到右上角扩散加密 
       case 2 
           I2=LUTRD(I2);%左上角到右下角扩散加密 
       case 3 
           I2=RDTLU(I2);%右下角到左上角扩散加密 
       case 4 
           I2=LTR(I2);%左半部分对右半部分置乱加密 
       case 5 
           I2=RTL(I2);%右半部分对左半部分置乱加密 
       case 6 
           I2=UTD(I2);%上半部分对下半部分置乱加密 
       case 7 
           I2=DTU(I2);%下半部分对上半部分置乱加密 
       case 8 
           I2=HUD(I2);%从上到下行扩散 
       case 9 
           I2=HDU(I2);%从下到上行扩散 
       case 10 
           I2=LLR(I2);%从左到右列扩散 
       case 11 
           I2=LRL(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(1),subplot(2,2,2);imshow(uint8(I));title('加密2'); 
%加密左下角 
%计算右下角加密后的异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:m/2-1 
       IX=bitxor(IX,I2(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 
           I3=RUTLD(I3);%右上角到左下角扩散加密 
       case 1 
           I3=LDTRU(I3);%左下角到右上角扩散加密 
       case 2 
           I3=LUTRD(I3);%左上角到右下角扩散加密 
       case 3 
           I3=RDTLU(I3);%右下角到左上角扩散加密 
       case 4 
           I3=LTR(I3);%左半部分对右半部分置乱加密 
       case 5 
           I3=RTL(I3);%右半部分对左半部分置乱加密 
       case 6 
           I3=UTD(I3);%上半部分对下半部分置乱加密 
       case 7 
           I3=DTU(I3);%下半部分对上半部分置乱加密 
       case 8 
           I3=HUD(I3);%从上到下行扩散 
       case 9 
           I3=HDU(I3);%从下到上行扩散 
       case 10 
           I3=LLR(I3);%从左到右列扩散 
       case 11 
           I3=LRL(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(1),subplot(2,2,3);imshow(uint8(I));title('加密3'); 
%加密左上角 
%计算左下角加密后的异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:m/2-1 
       IX=bitxor(IX,I3(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 
           I0=RUTLD(I0);%右上角到左下角扩散加密 
       case 1 
           I0=LDTRU(I0);%左下角到右上角扩散加密 
       case 2 
           I0=LUTRD(I0);%左上角到右下角扩散加密 
       case 3 
           I0=RDTLU(I0);%右下角到左上角扩散加密 
       case 4 
           I0=LTR(I0);%左半部分对右半部分置乱加密 
       case 5 
           I0=RTL(I0);%右半部分对左半部分置乱加密 
       case 6 
           I0=UTD(I0);%上半部分对下半部分置乱加密 
       case 7 
           I0=DTU(I0);%下半部分对上半部分置乱加密 
       case 8 
           I0=HUD(I0);%从上到下行扩散 
       case 9 
           I0=HDU(I0);%从下到上行扩散 
       case 10 
           I0=LLR(I0);%从左到右列扩散 
       case 11 
           I0=LRL(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(1),subplot(2,2,4);imshow(uint8(I));title('加密4'); 
figure(2),imhist(uint8(I));title('加密直方图'); 
%解密 
%计算左下角加密后的直方图 
IX=0; 
for i=1:m/2-1 
   for j=1:m/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=50:-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(3),subplot(2,2,1);imshow(uint8(I));title('解密1'); 
%计算右下角加密后的直方图 
IX=0; 
for i=1:m/2-1 
   for j=1:m/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=50:-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(3),subplot(2,2,2);imshow(uint8(I));title('解密2'); 
%计算右下角加密后的直方图 
IX=0; 
for i=1:m/2-1 
   for j=1:m/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=50:-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(3),subplot(2,2,3);imshow(uint8(I));title('解密3'); 
%计算左上角异或值 
IX=0; 
for i=1:m/2-1 
   for j=1:m/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=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   
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(3),subplot(2,2,4);imshow(uint8(I));title('解密4');