%同时打乱各行和各列进行明文图像第一次加密 %%%
clear;
W = imread('lena.tif');
s = size(W);
r = randsample(s(1), s(1));
W1 = W(r, :, :);
c = randsample(s(2), s(2));
W2 = W1(:, c, :);
i = 1; f = 1:length(c);
while i <= length(c)
f(i) = find(c == i);
i = i + 1;
end
P = W2;
R = P(:,:,1); %提取明文图像的 R 层像素
G = P(:,:,2); %提取明文图像的 G 层像素
B = P(:,:,3); %提取明文图像的 B 层像素
figure(1)
subplot(2,2,1);imshow(R,[]);title(' 第 一 次 加 密 的 R 层
');imwrite(R,'R1.tif')
subplot(2,2,2);imshow(G,[]);title(' 第 一 次 加 密 的 G 层
');imwrite(G,'G1.tif')
subplot(2,2,3);imshow(B,[]);title(' 第 一 次 加 密 的 B 层
');imwrite(B,'B1.tif')
subplot(2,2,4);imshow(P,[]);title(' 第 一 次 加 密 的 RGB 彩 色 层
');imwrite(P,'第一次加密的 RGB 彩色层.tif')
%%%%%%第二次加密%%%%%
[M,N]=size(R); %利用 Logistic 混沌映射,对 R 分层图像进行序列
加密
u=3.9;
x0=0.5;
x=x0;
for i=1:100 %迭代 100 次,达到充分混沌状态
x=u*x*(1-x);
end
R1=zeros(1,M*N); %产生一维混沌加密序列
R1(1)=x;
for i=1:M*N-1
R1(i+1)=u*R1(i)*(1-R1(i));
end
R2=uint8(255*R1); %归一化序列
R3=reshape(R2,M,N); %转化为二维混沌加密序列
R4=bitxor(R,R3); %异或操作加密
imwrite(R4,'R2.tif')