混沌加密

更新时间:2023-09-22 16:32:01 阅读量: 经管营销 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

网络安全综合设计

课题名称:基于混沌的JPG图像加密系统 专业班级:信息安全11-1班 姓 名: 学 号:

1.问题描述

混沌系统由于对初值的敏感性,很小的初值误差就能被系统放大,因此,系统的长期性是不可预测的。又因为混沌序列具有很好的统计特性,所以它可以产生随机数列,这些特性很适合于序列加密技术。混沌系统的特性使得它在数值分布上不符合概率统计学原理,得不到一个稳定的概率分布特征。因此从理论上讲,利用混沌原理对数据进行加密可以防范频率分析攻击、穷举攻击等攻击方法,使得密码难于分析、破译。

2.基本要求

在MATLAB环境下利用混沌系统实现JPG图像的加密。

3.算法描述

设A表示大小为M*N的图像。由于JPG图像为彩色图像,所以先将图像分为R、G、B三层,然后对每层分别加密,再将加密后的三层合成图像。又由于JPG图像为压缩图像,若加密后的图像保存为JPG格式则会导致失真,因此将加密后的图像保存为bmp格式(无损不压缩)。

加密算法:

(l)给定两个Logistic系统的参数U1和U2,并给定两个系统初值x1和x2。

(2)取原始图像A的M+A的值之和,该和对256取余运算,得到一个[0,255]范围的整数,然后以该整数除以256,得到的结果作为辅助密钥k。

(3)用辅助密钥k修改混沌系统的初始值作为logistic混沌系统的初始值,构造2个长度为 M*N的实数混沌序列。

(4)将由步骤(3)得到的2个实数混沌序列进行转换,得到2个改进的混沌序列。 (5)顺序取图像中的一点,根据该点是奇数点或是偶数点生成两组加密秘钥。

(6)用原始图像A中的第n个像素点灰度值A(x,y)与步骤(5)产生的logistic密钥值进行按二进制位异或操作,得到加密后的像素值A’(x,y)。

(7)重复(5)—(6)步,直到将将所有像素点加密完毕,即得到加密图像A’。 解密过程类似。

由于混沌系统的最大特性是初值的改变会对系统产生极大影响,因此为验证系统的性能,用两种初值对图片进行加密后,将两种加密后的图片进行对比。 对比方法:

将加密后的两张图片的R、G、B层的相应位的像素值分别相减,将相减后的像素值构成的R、G、B层合成一张图片。若两张图片相同,则对比图片为全黑色,相差越多图片越杂乱。

4.模块划分

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%加密按钮的回调函数 str1=get(handles.edit1,'String'); str2=get(handles.edit2,'String'); str=strcat(str1,'\\',str2);

A=imread(str);%原图像

%将r g b 三层按矩阵形式分别存储到AR AG AB中 AR=A(:,:,1); AG=A(:,:,2); AB=A(:,:,3);

[M,N]=size(AR); %[m,n] = size(X)返回矩阵X的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数。

%给定两个Logistic系统的参数u1和u2,并给定两个系统初值 u1=4; u2=4;

x1(1)=0.299998; x2(1)=0.799998;

sumA=M+N; %原始图像A的所有像素的值的和 k=mod(sumA,256)*1.0/255;%得到辅助秘钥k

%用辅助秘钥修改混沌初值,以修改后的作为logistic混沌系统的初始值 x1(1)=(x1(1)+k)/2; x2(1)=(x2(1)+k)/2;

y1(1)=(1/3.1415926)*asin(sqrt(x1(1))); y2(1)=(1/3.1415926)*asin(sqrt(x2(1))); %产生两个长度为m*n的实数混沌序列 for i=1:1:M*N-1

x1(i+1)=u1*x1(i)*(1-x1(i)); x2(i+1)=u2*x2(i)*(1-x2(i)); end

%得到两个长度为m*n的改进混沌序列 for i=1:1:M*N

y1(i)=(1/3.1415926)*asin(sqrt(x1(i))); y2(i)=(1/3.1415926)*asin(sqrt(x2(i))); end

%顺序取图中一点,若该点的序号属于奇数,则由实数混沌序列的y1(n)构造加密秘钥,若为偶数,则由y2(n)构造加密秘钥。 n=1;

for i=1:1:M

for j=1:1:N

if mod(n,1)==0

k(n)=mod(floor(y1(n)*10^15),256); else

k(n)=mod(floor(y2(n)*10^15),256);

end

%用原始图像A中的第n个像素点灰度值与秘钥k(n)进行按二进制位异或操作,得到加密后的像素值

AR1(i,j)=bitxor(AR(i,j),k(n)); AG1(i,j)=bitxor(AG(i,j),k(n)); AB1(i,j)=bitxor(AB(i,j),k(n)); n=n+1; end end

%对比加密 u1=4; u2=4;

x1(1)=0.299999; x2(1)=0.799999;

sumA=M+N; %原始图像A的所有像素的值的和 k=mod(sumA,256)*1.0/255;%得到辅助秘钥k

%用辅助秘钥修改混沌初值,以修改后的作为logistic混沌系统的初始值 x1(1)=(x1(1)+k)/2; x2(1)=(x2(1)+k)/2;

y1(1)=(1/3.1415926)*asin(sqrt(x1(1))); y2(1)=(1/3.1415926)*asin(sqrt(x2(1))); %产生两个长度为m*n的实数混沌序列 for i=1:1:M*N-1

x1(i+1)=u1*x1(i)*(1-x1(i)); x2(i+1)=u2*x2(i)*(1-x2(i)); end

%得到两个长度为m*n的改进混沌序列 for i=1:1:M*N

y1(i)=(1/3.1415926)*asin(sqrt(x1(i))); y2(i)=(1/3.1415926)*asin(sqrt(x2(i))); end

%顺序取图中一点,若该点的序号属于奇数,则由实数混沌序列的y1(n)构造加密秘钥,若为偶数,则由y2(n)构造加密秘钥。 n=1;

for i=1:1:M

for j=1:1:N

if mod(n,1)==0

k(n)=mod(floor(y1(n)*10^15),256); else

k(n)=mod(floor(y2(n)*10^15),256); End

%用原始图像A中的第n个像素点灰度值与秘钥k(n)进行按二进制位异或操作,得到加密后的像素值

YR(i,j)=bitxor(AR(i,j),k(n));

YG(i,j)=bitxor(AG(i,j),k(n)); YB(i,j)=bitxor(AB(i,j),k(n)); n=n+1; end end n=1;

for i=1:1:M

for j=1:1:N

YR1(i,j)=abs(YR(i,j)-AR1(i,j)); YG1(i,j)=abs(YG(i,j)-AG1(i,j)); YB1(i,j)=abs(YB(i,j)-AB1(i,j)); end end

Y1(:,:,1)=YR1; Y1(:,:,2)=YG1; Y1(:,:,3)=YB1;

%得到加密后的图像A1 A1(:,:,1)=AR1; A1(:,:,2)=AG1; A1(:,:,3)=AB1;

str_1=strcat(str1,'\\','jiami_',str2,'.bmp'); imwrite(A1,str_1,'bmp');

str_2=strcat(str1,'\\','duibi_jiami_',str2,'.bmp'); imwrite(Y1,str_2,'bmp');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%结束

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%解密按钮的回调函数 str3=get(handles.edit3,'String'); str4=get(handles.edit4,'String'); str=strcat(str3,'\\',str4); A=imread(str);

%将r g b 三层按矩阵形式分别存储到AR_jiami AG_jiami AB_jiami中 AR=A(:,:,1); AG=A(:,:,2); AB=A(:,:,3); [M,N]=size(AR);

%生成y1和y2序列 u1=4; u2=4;

x1(1)=0.299998; x2(1)=0.799998; sumA=M+N;

k=mod(sumA,256)*1.0/255; x1(1)=(x1(1)+k)/2; x2(1)=(x2(1)+k)/2;

y1(1)=(1/3.1415926)*asin(sqrt(x1(1))); y2(1)=(1/3.1415926)*asin(sqrt(x2(1))); for i=1:1:M*N-1

x1(i+1)=u1*x1(i)*(1-x1(i)); x2(i+1)=u2*x2(i)*(1-x2(i)); end

for i=1:1:M*N

y1(i)=(1/3.1415926)*asin(sqrt(x1(i))); y2(i)=(1/3.1415926)*asin(sqrt(x2(i))); end n=1;

for i=1:1:M

for j=1:1:N

if mod(n,1)==0

k(n)=mod(floor(y1(n)*10^15),256); else

k(n)=mod(floor(y2(n)*10^15),256); end

AR2(i,j)=bitxor(AR(i,j),k(n)); AG2(i,j)=bitxor(AG(i,j),k(n)); AB2(i,j)=bitxor(AB(i,j),k(n)); n=n+1; end end

A2(:,:,1)=AR2; A2(:,:,2)=AG2; A2(:,:,3)=AB2;

str_1=strcat(str3,'\\','jiemi_',str4,'.jpg'); imwrite(A2,str_1,'jpg');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%结束

5.数据测试

此系统也可以对bmp类型的图像进行加密。

本文来源:https://www.bwwdw.com/article/n7yd.html

Top