对于图像加密,采用按位异或的方式。
%% 异或运算xor()函数
%异或运的性质
%若xor(a,b)=c成立:
%则xor(a,c)=b与xor(b,c)=a也成立
由于异或具有以上的性质,因此采用其对图像进行加密与解密。
%% 按位异或运算 bitxor()
%将每一个数都拆成二进制,然后按位异或
x=5;%二进制:101
y=6;%二进制:110
c=bitxor(x,y);
%运算过程:
%5:101
%6:110
% 011最终结果,也就是十进制的三
一,函数定义:
首先是生成灰度混沌加密图像的定义函数:
function a=hui_2(x,m,n)
%x表示函数初值
%m,n分别表示矩阵的长与宽
a=zeros(m,n);
a(1)=x;
for i=2:m*n
a(i)=1-2*a(i-1)*a(i-1);
end
for i=1:n*m
a(i)=mod(round(a(i)*98273917129),256);
end
% imshow(a,[]);
end
其次是生成彩色混沌图像的定义函数:
function c=hui_3(x,m,n)
%x表示函数初值
%m,n分别表示矩阵的长与宽
r=zeros(m,n);
r(1)=x+0.000000001;
for i=2:m*n
r(i)=1-2*r(i-1)*r(i-1);
end
for i=1:n*m
r(i)=mod(round(r(i)*98273917129),256);
end
g=zeros(m,n);
g(1)=x;
for i=2:m*n
g(i)=1-2*g(i-1)*g(i-1);
end
for i=1:n*m
g(i)=mod(round(g(i)*98273917129),256);
end
b=zeros(m,n);
b(1)=x-0.000000001;
for i=2:m*n
b(i)=1-2*b(i-1)*b(i-1);
end
for i=1:n*m
b(i)=mod(round(b(i)*98273917129),256);
end
c=zeros(m,n,3);
c=cat(3,r,g,b);
c=uint8(c);
% imshow(uint8(c));
end
二,灰度图像加密
%% 灰度图像的异或加密
%% 导入图像
clc
clear
a=imread('灰度.bmp');
subplot(2,2,1);
imshow(a);
title('原始图像')
%% 生成密钥图像
keys=hui_2(0.69,size(a,1),size(a,2));
subplot(2,2,2);
imshow(keys,[]);
title('密钥图像');
%% 生成加密图像
mi_a=bitxor(keys,a);
subplot(2,2,3);
imshow(mi_a,[]);
title('加密后图像');
%% 解密图像
jie_a=bitxor(mi_a,keys);
subplot(2,2,4);
imshow(jie_a);
title('解密后图像');
运行结果:
三,对于彩色图像的加密:
%% 彩色图像的加密
a=imread('text.jpg');
subplot(2,2,1);
imshow(a);
title('yuan shi');
%% keys
keys=hui_3(0.91,size(a(:,:,1),1),size(a(:,:,1),2));
subplot(2,2,2);
imshow(keys);
title('keys');
%% jia_mi
mi_a=bitxor(keys,a);
subplot(2,2,3);
imshow(mi_a);
title('jia mi');
%% ji_mi
ji_a=bitxor(keys,mi_a);
subplot(2,2,4);
imshow(ji_a);
title('ji mi');
运行结果: