用MATLAB實(shí)現(xiàn)基于混沌的圖像置亂加密算法

由于圖像文件的加密有其自身的要求,傳統(tǒng)的文字加密方法不適合圖像文件加密。為此,我們?cè)诨煦缬成浼用芩惴ǖ幕A(chǔ)上,提出了一種利用Logistic混沌序列對(duì)圖像像素點(diǎn)置亂實(shí)現(xiàn)加密的算法,那么,我們今天借助MATLAB軟件平臺(tái),看看基于混沌的圖像置亂加密算法如何實(shí)現(xiàn)。

一、基于混沌的圖像置亂加密算法

本文提出的基于混沌的圖像置亂加密算法示意圖如圖1所示。

用MATLAB的實(shí)現(xiàn)基于混沌的圖像置亂加密算法

加密算法如下:首先,數(shù)字圖像B大小為M×N(M是圖像B的行像素?cái)?shù),N是圖像B的列像素?cái)?shù)),將A的第j行連接到j(luò)-1行后面(j=2,3,A,M),形成長(zhǎng)度為M×N的序列C。其次,用Logistic混沌映射產(chǎn)生一個(gè)長(zhǎng)度為的混沌序列{k1,k2,A,kM×N},并構(gòu)造等差序列D:{1,2,3,A,M×N-1,M×N}。

再次,將所產(chǎn)生的混沌序列{k1,k2,A,kM×N}的M×N個(gè)值由小到大排序,形成有序序列{k1',k2',A',kM×N'},確定序列{k1,k2,A,kM×N}中的每個(gè)ki在有序序列{k1',k2',A',kM×N'}中的編號(hào),形成置換地址集合{t1,t2,A,tM×N},其中ti為集合{1,2,A,M×N}中的一個(gè);按置換地址集合{t1,t2,A,tM×N}對(duì)序列C進(jìn)行置換,將其第i個(gè)像素置換至第ti列,i=1,2,A,M×N,得到C'。將等差序列D做相同置換,得到D'。

最后,B'是一個(gè)M×N的矩陣,B'(i ,j)=C'((i-1)×M+j),其中i=1,2,A,M;j=i=1,2,A,N,則B'就是加密后的圖像文件。

解密算法與加密算法相似,不同之處在于第3步中,以序列C'代替隨機(jī)序列{k1,k2,A,kM×N},即可實(shí)現(xiàn)圖像的解密。

二、用MATLAB的實(shí)現(xiàn)基于混沌的圖像置亂加密算法

本文借助MATLAB軟件平臺(tái),使用MATLAB提供的文本編輯器進(jìn)行編程實(shí)現(xiàn)加密功能。根據(jù)前面加密的思路,把加密算法的編程分為三個(gè)主要模塊:首先,構(gòu)造一個(gè)與原圖a等高等寬的矩陣b加在圖像矩陣a后面形成復(fù)合矩陣c:

b=zeros(m1,n1);

ifm1>=n1

ifm1>n1

fore=1:n1

b=(e,e);

end

......

else

fore=1:n1

end

fore=1:(n1-m1)

b((m1+e-1),e)=m1+e-1

end

end

c=zeros(m1*2,n1);

c=zeros(m1*2,1);

c=[b,a];

然后,用Logitic映射產(chǎn)生混沌序列:

……

forn=1:n1+100x(n+1)=q*x(n)*(1-x(n));

endn=101:1:n1+100;

y(n-100)=x(n);

…...

最后,采用冒泡法將產(chǎn)生的混沌序列值由小到大進(jìn)行排序,并利用同樣的換序條理依次對(duì)復(fù)合矩陣的列和行進(jìn)行打亂排序:

forf=1:n1-1forh=f:n1ify(f)>y(h)k=y(f);

y(f)=y(h);

y(h)=k;

c1=c(:,f);

c(:,f)=c(:,h);

c(:,h)=c1;

end

…...

forh=g:m1

if y(f>y<h)

k=y(f)

y(f)=y(h)

y(h)=k;

d1=d(:,f);

d(:,f)=d(:,h);

d(:h)=d;

end

......

解密的程序與加密的相反。

三、基于混沌的圖像置亂加密算法效果分析

利用Logistic混沌序列對(duì)圖像像素點(diǎn)置亂對(duì)圖像文件加密,其效果要比用Logistic混沌序列直接對(duì)圖像文件加密好,令x0=0.3001,圖2(b)為用Logistic混沌序列直接對(duì)圖像文件愛你進(jìn)行加密的圖像,圖2(c)為用Logistic混沌序列對(duì)圖像像素點(diǎn)置亂對(duì)圖像文件進(jìn)行加密的圖像,圖2(d)為其的解密圖像文件。

用MATLAB的實(shí)現(xiàn)基于混沌的圖像置亂加密算法

由圖2(b)和(c)圖可見,原圖像的人物和輪廓已經(jīng)全部覆蓋,無(wú)法分辨出原圖像的細(xì)節(jié)信息。但從效果上來(lái)看,采用圖像置亂與混沌映射結(jié)合的加密方法所得到的加密效果要優(yōu)于直接用混沌進(jìn)行加密的方法。下面,針對(duì)日常生活中遇到的圖像破損問題,對(duì)本文算法的抗破損能力進(jìn)行研究。當(dāng)受損區(qū)域大小為圖像面積7.76%時(shí),恢復(fù)的圖像仍然比較清晰(如圖3(a)、(d));受損區(qū)域大小為圖像面積18.63%時(shí),恢復(fù)的圖像效果開始變差,出現(xiàn)零星的黑點(diǎn)(如圖3(b)、(e));受損區(qū)域大小為圖像面積25.36%時(shí),恢復(fù)的圖像效果不理想,布滿黑點(diǎn)(如圖3(b)、(e))。

用MATLAB的實(shí)現(xiàn)基于混沌的圖像置亂加密算法

原圖任意區(qū)域的像素在置亂圖中是均勻分布的,置亂圖受損區(qū)域的形狀及所處的位置不同對(duì)恢復(fù)圖像所造成的影響有限。圖4中(a)、(b)、(c)是三幅遭到損壞的密圖,受損區(qū)域(黑色)形狀不同,位置不同,只有大小是相同的,均為2500個(gè)像素點(diǎn)(為圖像面積12.94%)。(a)、(b)、(c)的恢復(fù)圖像分別為(d)、(e)、(f),三幅恢復(fù)圖像的效果沒有明顯差別。因此,可以認(rèn)為恢復(fù)圖像的效果取決于受損區(qū)域的面積大小,而受損區(qū)域的形狀、位置產(chǎn)生的影響很小,只要其面積不大于原圖面的20%,就能夠恢復(fù)出比較理想的圖像。

用MATLAB的實(shí)現(xiàn)基于混沌的圖像置亂加密算法

?小知識(shí)之MATLABMATLAB是美國(guó)MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù)計(jì)算語(yǔ)言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。