资源描述:
《基于henon混沌映射的图像加密实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于Henon混沌映射的图像加密实验一、实验目的1・熟悉具有分组密码结构特性的混沌映射;2.掌握利用二维Henon混沌映射实现图像像素扩散加密的原理;3.培养学牛从事高维信号安全保护的动手编程能力。二、实验原理通过读操作获取图像像素值,然后利用Henon混沌映射实现像素值扩散操作,其结果通过写操作写入加密后文件。1、对于长宽相等(M二N)的图像加密解密原理如下:(1)加密过程加密函数为:=(1-此+如)modM(£j)其屮,a=5;b=l;c=l;d=3;(£,儿)为原图像像素值的位置,(£+〕,儿+J为改变后的位置。modM为对M取余数。同理modN也是。改变像素值并赋给新的位置(£+
2、
3、,儿+J,公式如下:data(xn+l,儿+】)=[A(xn,儿)+x~+]mod256(2-2)(2)解密过程为:有(2・1)得,xn+l=l-ax^yn-l}M(2-3)几+】=£+宓為一A"(2-4)由(2-3)得xn=yn+[-dx;+^l2N,等式两边同时对M取余数,得£=(几+i-Ati)modM(2-5)然后把百代入(2-3),整理得儿=兀“+]-1+做;+/
4、M,最后把等式两边同时对N取余数得:yn=(£+[-1+cix:)modN(2-5)由式(2・2)可得像素值的恢复:人(£,儿)=ldata(xn+[,几+i)-尤-£]mod256(2-6)2、对于长宽不相等(MHN
5、)的图像加密加密解密原理如下:(1)加密过程加密函数为:£+i=(x”+y”)modM(9_?)[儿+i=(c£+(1+c)儿)modN一其中,c=N/gcd(M,N);改变像素值并赋给新的位置(兀曲,儿+J,公式如下:data(xn+l,儿+】)=
6、A(xft,儿)+£+垃
7、mod256(2-8)(2)解密过程为:由加密函数得:x„+1=xfJ+y/l-/lM(2-9)儿=%+(l+c)儿-M<2-10)对(2-9)两边同时乘以c,然后(2-10)减去(2-9)整理可得:儿+】一阿+
8、二儿+4MJ2N(2-11)(2-11)两边对N取余整理可得:儿=(片+1一勺+JmodW(2-12)把
9、yn代入(2-9),然后两边对M取余整理可得:£=(£+i一儿)modM(2-13)由(2-8)可恢复像素值的大小:4(兀,儿)二[data(xn+l,几+1)-尤一y;]mod256(2-14)三、实验步骤1.熟悉图像加密解密原理;2.熟悉Henon混沌系统;3.采用Matlab编写图像加解密程序并仿真测试;四、程序代码1、(M=N)clc;clear;I=imread(,C:UsersLilongDesktopmatlabdianzishiyanlena.bmp,);figure(l)subplot(2,2,l);imshow(I);title(原始图像);A=double
10、(rgb2gray(I));%转换成灰度图像subplot(2,2,2);imshow(uint8(A));%显示灰度图像title。灰度图像J;[M,N]=size(A);%获取图像的大小data=zeros(M,N);a=5;b二1;c=l;d=3;Al=zeros(M,N);forloop=l:2forx=l:Mfory=l:Nx1=mod((1-a*xA2+b*y),M);%改变行值ifxl==0xl=M;endy1=mod((c*x+d*x1A2),N);%改变列值ifyl==0yl=N;enddata(x1,yl)=mod(A(x,y)+xA2+yA2,256);%改变像素数值
11、并赋值给新的位置endendAl二data;endsubplot(2,2,3);imshow(uint8(A1));%显示解密后的图像titled加密后图像J;A2=zeros(M,N);A3=zeros(M,N);forloop=l:2forxl二1:Mforyl=l:Nx2=mod(y1-d*x1A2,M);%解密原来的行值ifx2==0x2=M;endy2=mod(x1+a*x2A2-l,N);%解密原来的列值讦y2=0y2=N;endA2(x2,y2)=mod(Al(xl,yl)-x2A2-y2A2,256);%恢复像素值endendA3=A2;endsubplot(2,2,4);
12、imshow(uint8(A3));%显示解密后的图像titleC解密后图像);2、(MHN)clc;clear;I=imread('C:DocumentsandSettingsAdministrator桌面Mena.bmp');figure(l)subplot(2,2,l);imshow(I);titleC原始图像);Il=1(51:150,31:170,1:3);%裁剪图像A=double(rgb2gray(1