复现别人的论文一篇(彩色图像加密)

clc
clear all
image=imread('Lean.jpg');
R=image(:,:,1); 
G=image(:,:,2);
B=image(:,:,3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%R通道
Array=cell(1,8);
% 显示8个位平面图像
for i=1:8
     Array{i} =bitget(R,i);
end 
A1=Array{1};
B1=Array{2};
C1=Array{3};
D1=Array{4};
E1=Array{5};
F1=Array{6};
G1=Array{7};
H1=Array{8};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%G通道
Array=cell(1,8);
% 显示8个位平面图像
for i=1:8
     Array{i} =bitget(G,i);
end 
A2=Array{1};
B2=Array{2};
C2=Array{3};
D2=Array{4};
E2=Array{5};
F2=Array{6};
G2=Array{7};
H2=Array{8};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%B通道
Array=cell(1,8);
% 显示8个位平面图像
for i=1:8
     Array{i} =bitget(B,i);
end 
A3=Array{1};
B3=Array{2};
C3=Array{3};
D3=Array{4};
E3=Array{5};
F3=Array{6};
G3=Array{7};
H3=Array{8};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
image1=[A1,B1,C1,D1,E1,F1,G1,H1,A2,B2,C2,D2,E2,F2,G2,H2,A3,B3,C3,D3,E3,F3,G3,H3];
x0=[1,1,1,1];   %赋初值
[t,y]=ode45('hy',[0,2000],x0);  %求解微分方程
x1=y(:,1);
x2=y(:,2);
x3=y(:,3);
x4=y(:,4);

sum1=0;
sum2=0;
sum3=0;
for i=1:256
    for j=1:256
       sum1=sum1+double(R(i,j));
       sum2=sum2+double(G(i,j));
       sum3=sum3+double(B(i,j));
    end
end
g=(sum1+sum2+sum3)/(256*256);
for i=1:256
    keyh(i)=abs(x1(i)+x2(i)*g)-floor(abs(x1(i)+x2(i)*g));
end
for i=1:6144
    keyv(i)=abs(x3(i)*g+x4(i))-floor(abs(x3(i)*g+x4(i)));
end
[h,v]=size(image1);
for i=1:256
    h(i)=i;
end
for i=1:6144
    v(i)=i;
end

for i=1:256
hh(i)=h((floor(keyh(i)*256)));
end

for i=1:6144
   vv(i)=v((floor(keyv(i)*6144)));
end

for i=1:256
    for j=1:6144
    image1(i,j)=image1(hh(i),j);
    end
end

for i=1:256
    for j=1:6144
    image1(i,j)=image1(i,vv(j));
    end
end

L = size(image1);
height=256;
width=256;
max_row = floor(L(1)/height);
max_col = floor(L(2)/width);
seg = cell(max_row,max_col);
%分块
for row = 1:max_row      
    for col = 1:max_col        
    seg(row,col)= {image1((row-1)*height+1:row*height,(col-1)*width+1:col*width,:)};  
    end
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[M,N]=size(seg{1});
R1=zeros(M,N,'uint8');
for i=1:8
  R1=bitset(R1,i,seg{i});
end

Array{1}=seg{9};
Array{2}=seg{10};
Array{3}=seg{11};
Array{4}=seg{12};
Array{5}=seg{13};
Array{6}=seg{14};
Array{7}=seg{15};
Array{8}=seg{16};
[M,N]=size(Array{1});
G1=zeros(M,N,'uint8');
for i=1:8
  G1=bitset(G1,i,Array{i});
end

Array{1}=seg{17};
Array{2}=seg{18};
Array{3}=seg{19};
Array{4}=seg{20};
Array{5}=seg{21};
Array{6}=seg{22};
Array{7}=seg{23};
Array{8}=seg{24};
[M,N]=size(Array{1});
B1=zeros(M,N,'uint8');
for i=1:8
  B1=bitset(B1,i,Array{i});
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x0=[1,1,1,1];   %赋初值
[tt,yy]=ode45('frt',[0,2000],x0);  %求解微分方程
xx1=yy(:,1);
xx2=yy(:,2);
xx3=yy(:,3);
xx4=yy(:,4);
for i=1:65536
sk1(i)=floor(abs(xx1(i)+xx2(i)))-mod(floor(abs(xx1(i)+xx2(i)))*(10^14),256);
end
for i=1:65536
sk2(i)=floor(abs(xx1(i)+xx3(i)))-mod(floor(abs(xx1(i)+xx3(i)))*(10^14),256);
end
for i=1:65536
sk3(i)=floor(abs(xx1(i)+xx4(i)))-mod(floor(abs(xx1(i)+xx4(i)))*(10^14),256);
end
for i=1:65536
sk4(i)=floor(abs(xx2(i)+xx3(i)))-mod(floor(abs(xx2(i)+xx3(i)))*(10^14),256);
end
for i=1:65536
sk5(i)=floor(abs(xx2(i)+xx4(i)))-mod(floor(abs(xx2(i)+xx4(i)))*(10^14),256);
end
for i=1:65536
sk6(i)=floor(abs(xx3(i)+xx4(i)))-mod(floor(abs(xx3(i)+xx4(i)))*(10^14),256);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:65536
    sk12(i)=mod((bitxor(sk1(i),sk2(i)))*sk6(i),256);
    sk35(i)=mod((bitxor(sk3(i),sk5(i)))*sk4(i),256);
    sk46(i)=mod((bitxor(sk4(i),sk6(i)))*sk2(i),256);
end

sum1=0;
sum2=0;
for i=1:65536
      keys(i)=(abs(sum1+(x1(i)+x2(i)+x3(i)+x4(i)))-floor(abs(sum2+(x1(i)+x2(i)+x3(i)+x4(i)))))*(10^14);
         
end

sum=0;
sum=sum+(R1(1)+G1(1)+B1(1));
sy(1)=mod(floor(sum*keys(1)),3);
for i=2:65536
    sy(i)= mod(floor(sy(i-1)-(R1(i)+G1(i)+B1(i)))*keys(i),3);
end
sum11=0;
for i=1:65536
    sum11=R1(i)+sum;
end
sum22=0;
for i=1:65536
    sum22=G1(i)+sum;
end
sum33=0;
for i=1:65536
    sum33=B1(i)+sum;
end
R1=double(R1);
G1=double(G1);
B1=double(B1);
sk12=uint8(sk12);
sk35=uint8(sk35);
sk46=uint8(sk46);
R2(1)=mod(sum11+sk1(1),256);
G2(1)=mod(sum22+sk2(1),256);
B2(1)=mod(sum33+sk3(1),256);

for i=2:65536
    R2(i)=bitxor(mod(R1(i)+R2(i-1),256),sk12(i));
    G2(i)=bitxor(mod(G1(i)+G2(i-1),256),sk35(i));
    B2(i)=bitxor(mod(B1(i)+B2(i-1),256),sk46(i));
end
R2=reshape(R2,256,256);
G2=reshape(G2,256,256);
B2=reshape(B2,256,256);
key=cat(3,R2,G2,B2);
figure(1);
imhist(uint8(key));
figure(2);
imshow(uint8(key));
imwrite(uint8(key),'wenxian-4.bmp');

猜你喜欢

转载自blog.csdn.net/bj21002000/article/details/108482237