logo资料库

基于Logistic系统的图像加密(MATLAB版).doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
加密解密算法描述
加密解密算法描述 设 NMA * 表示大小为 MxN 的图像,A(x,y)(x[0,M-1],y[0,N-1])表示图像 A 在点(x, y)处的灰度值,A’(x,y)(x[0,M-1],y[0,N-1])表示为(x,y)经过加密后所对应的灰度值。 基于图像像素值替代的加密算法设计如下: (l)给定两个 Logistic 系统的参数 1U 和 2U ,并给定两个系统初值 ' (2)取原始图像 A 的所有像素的值之和,该和对 256 取余运算,得到一个[0,255]范围的 10x 和 ' 20x 。 整数,然后以该整数除以 256,得到的结果作为辅助密钥 k,k(O,l)。 (3)用辅助密钥 k 修改混沌系统初始值: ' 10x = ( ' 10x +k)/2, ' 20x =( ' 20x +k)/2。以修正后的 10x 和 20x 。作为 logistic 混沌系统的初始值,由式(4.1)构造 2 个长度为 M*N 的实数混沌序 列。 (4)将由步骤(3)得到的 2 个实数混沌序列按式(4.7)进行转换,得到 2 个改进的混沌序 列:{y1(i)},{y2(i)},i=1,2,3,…,MxN。 (5)顺序取图像中的一点(设该点的序号为 n),若该点的序号属于奇数,则由实数混沌序 列的 y1(n) 构造加密密钥: k(n) = mod(floor( yl(n) 10* 256),15) 若该点的序号属于偶数, 则由实数混沌序列的 y2(n) 构造加密密钥: k(n) = mod(floor( y2(n) 10* 15),256) 。 (6)用原始图像 A 中的第 n 个像素点灰度值 A(x,y)与步骤(5)产生的 logistic 密钥值进行按 二进制位异或操作,得到加密后的像素值 A’(x,y)。 (7)重复(5)—(6)步,直到将将所有像素点加密完毕,即得到加密图像 A’。 解密过程是上述加密过程的逆过程,算法类似。 在 MATLAB 中进行加密解密的算法代码如下所示: A=imread('rice.png'); imshow(A); [M,N]=size(A);%原始图像 A 的尺寸一 MxN u1=4;u2=4;x1(1)=0.2;x2(1)=0.7; sumA=sum(sum(A)); 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 %产生 2 个 Logistic 混沌序列 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 %改造 2 个 Logistic,得到两个 y 序列
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 %由 yl 和 y2 序列对原图像进行值替代加密 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 A1(i,j)=bitxor(A(i,j),k(n)); %得到加密像素 n=n+1; end end figure,imshow(A1); %输出得到的加密图像 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 A2(i,j)=bitxor(A1(i,j),k(n)); %得到加密像素 n=n+1; end end figure,imshow(A2); %输出得到的解密图像
分享到:
收藏