基于序列交叉變換的圖像置亂加密方法

近年來(lái),已出現(xiàn)了很多數(shù)字圖像置亂技術(shù),主要有:基于Arnold變換的、FASS曲線的、Hilbert曲線的、Fibonacci變換的、Gray碼變換的、仿射模變換的、混沌的、矩陣變換的、行列式變換的、拉丁方的以及基于三角函數(shù)的等等。那么,我們今天就給大家介紹一種基于序列交叉變換的圖像置亂加密方法。

一、序列交叉變換原理

為了方便敘述,以1,2,3,...,10為例說(shuō)明:假定1,2,3,...,10是一個(gè)給定的有序序列,從中間分成兩部分,采用隔位交叉對(duì)插的方法將其重新排序,經(jīng)一次交叉后,序列變?yōu)?,1,7,2,8,3,9,4,10,5或1,6,2,7,3,8,4,9,5,10,稱第一種方法為“內(nèi)插 ”,第二種方法為“外插” 。

基于序列交叉變換的圖像置亂加密方法
圖1是10個(gè)數(shù)字反復(fù)進(jìn)行內(nèi)插的變化情況,初看起來(lái)序列似乎變得越來(lái)越亂,但經(jīng)5次內(nèi)插后,所得序列恰好是原序列的倒序,顯然,再經(jīng)5次內(nèi)插后序列將恢復(fù)原序;圖1也反映出各個(gè)數(shù)字的位置變化情況,內(nèi)插時(shí),1移到2的位置,2移到4的位置等等。跟蹤箭頭的移動(dòng),我們可以看到10個(gè)數(shù)按以下次序互相取代:1,2,4,8,5,10,9,7,3,6,1,每?jī)?nèi)插一次,這10個(gè)數(shù)就沿著上述循環(huán)過(guò)程向前推進(jìn)一步。由于這一循環(huán)總共有10步,因此,經(jīng)過(guò)10次內(nèi)插后,各個(gè)數(shù)都回到其起始位置上。

基于序列交叉變換的圖像置亂加密方法

圖2是8個(gè)數(shù)的情形,由圖2可看出,8個(gè)數(shù)字組成的序列在內(nèi)插過(guò)程中,存在兩種循環(huán):1,2,4,8,7,5,1以及3,6,3,第一個(gè)循環(huán)每6次重復(fù)一次,第二個(gè)循環(huán)每2次重復(fù)一次。盡管循環(huán)的次數(shù)不同,但序列在內(nèi)插6次后仍然被還原。

事實(shí)上位置變動(dòng)都可以分為一系列的這種循環(huán)。而序列的長(zhǎng)度是有限的,所以每個(gè)位置上的數(shù)必定能回到它先前已在過(guò)的一個(gè)位置。從這一步開(kāi)始,它將重復(fù)先前的各個(gè)位置變動(dòng)。但能否肯定,當(dāng)一個(gè)數(shù)字第一次到達(dá)先前已到過(guò)的一個(gè)位置上時(shí),它所到達(dá)的就是其最初的位置,答案是肯定的,因?yàn)槿魏蝺?nèi)插總是可逆的。因此第一個(gè)出現(xiàn)重復(fù)時(shí)的位置必定是其最初位置。基于類似的理由,任何數(shù)字都不能從一個(gè)循環(huán)跳到另一個(gè)循環(huán)上。并且一旦知道有哪些循環(huán),就可以通過(guò)一種簡(jiǎn)單的方法得出還原次數(shù)。每個(gè)循環(huán)的長(zhǎng)度由它的步數(shù)決定:如果某一循環(huán)有n步,那么經(jīng)過(guò)n次內(nèi)插后就被還原。如果一個(gè)序列不止一個(gè)循環(huán),那么還原的次數(shù)就是各循環(huán)長(zhǎng)度的最小公倍數(shù),經(jīng)各循環(huán)長(zhǎng)度的最小公倍數(shù)次內(nèi)插后,所有數(shù)字必然回到其最初位置上。綜上知,對(duì)于任何由偶數(shù)個(gè)數(shù)組成的序列,經(jīng)過(guò)若干次的反復(fù)內(nèi)插后,總能復(fù)原為原來(lái)的順序。但一個(gè)序列在內(nèi)插變換中有多少個(gè)循環(huán)以及各循環(huán)的步長(zhǎng)是多少很難確定。

經(jīng)研究發(fā)現(xiàn),還原次數(shù)與序列長(zhǎng)度間存在一種規(guī)律,仍以10個(gè)數(shù)為例(如表1所示)。

基于序列交叉變換的圖像置亂加密方法

表1顯示了2的各次冪以及它們被11(總長(zhǎng)度加1)整除后所得的結(jié)果及余數(shù)。其中,2的10次方的余數(shù)為1,而使長(zhǎng)度為10的序列復(fù)原的內(nèi)插次數(shù)恰好為10。表2顯示了長(zhǎng)度為8的情形,從2的各次冪被9除所得的余數(shù)可看出。2的6次方的余數(shù)為1,而使長(zhǎng)度為8的序列復(fù)原的內(nèi)插次數(shù)也恰好是6。

基于序列交叉變換的圖像置亂加密方法

 

這一規(guī)律是普遍成立的,使一個(gè)序列復(fù)原所需的內(nèi)插次數(shù)始終等于使2的乘方與總長(zhǎng)度加1做取余運(yùn)算時(shí),余數(shù)恰好為1時(shí)對(duì)應(yīng)的乘方數(shù),即:序列長(zhǎng)度n與還原次數(shù)k滿足的關(guān)系為:

基于序列交叉變換的圖像置亂加密方法

當(dāng)n=10時(shí),因?yàn)閙od(210,10+1)=1,所以10個(gè)數(shù)字內(nèi)插的還原次數(shù)為10,n取其它值時(shí)原理與此同。通過(guò)大量實(shí)驗(yàn)均驗(yàn)證了該結(jié)論的正確性,在此僅給出了一小部分?jǐn)?shù)據(jù)(如表3所示)。

基于序列交叉變換的圖像置亂加密方法

二、序列交叉變換原理

1、算法的實(shí)現(xiàn)

置亂的主要功能是將圖像中像素的位置或者像素的顏色打亂,將原始圖像變換成一個(gè)雜亂無(wú)章的新圖像,使得圖像有較低的可懂性,但為了恢復(fù)原始圖像,我們必須保證置亂后圖像與原始圖像之間保持某種一一對(duì)應(yīng)關(guān)系,為了達(dá)到較好的置亂效果,應(yīng)將距離越靠近的點(diǎn)分布到越遠(yuǎn)的位置上,本文基于上面的原理采用如下兩種實(shí)現(xiàn)方法:

(1)一幅數(shù)字圖像,總可以通過(guò)特定的規(guī)則σ(如:FASS曲線、Hilbert曲線、Zigzag排列等)將其對(duì)應(yīng)的矩陣Am#n轉(zhuǎn)化為一維序列L,假設(shè)序列長(zhǎng)度m#n為偶數(shù),且設(shè)使序列L交叉還原的次數(shù)為k,那么實(shí)現(xiàn)置亂時(shí),先序列L進(jìn)行t次(t<k)交叉換位,得到新序列L,將序列L_改寫(xiě)為矩陣Am#n,則矩陣Am#n所對(duì)應(yīng)的圖像就是置亂后的圖像;而當(dāng)m#n為奇數(shù)時(shí),讀出序列L后,需在其最前邊或最后邊加入一個(gè)補(bǔ)偶標(biāo)致數(shù)h(h[0,255]),使得序列的總長(zhǎng)度變?yōu)榕紨?shù),其它操作與上同。但在得到的新序列L_改寫(xiě)為矩陣A_m#n時(shí),需將h去掉,并記下h在L中的位置w,以便還原時(shí)使用。還原時(shí)先將Am#n轉(zhuǎn)化為序列L,然后在其w處加入h,最后對(duì)所得序列進(jìn)行(k-t)次交叉換位,便得到序列L,去掉h后,再按規(guī)則將L轉(zhuǎn)化為矩陣B,則矩陣B所對(duì)應(yīng)的圖像就是還原后的圖像。

(2)一幅給定的m#n的圖像,也可以看成是一個(gè)m行n列組成的二維矩陣。只要分別對(duì)其各行(或列)進(jìn)行交叉換位,或?qū)λ行?、列同時(shí)進(jìn)行相同次數(shù)和相同方法的交叉換位,也可達(dá)到較好的置亂效果,算法也容易實(shí)現(xiàn)。當(dāng)m#n為奇數(shù)時(shí),可以保留一行(列)不變,也可以添加補(bǔ)偶行(列),原理與上同。

上述兩種方法均是通過(guò)某種數(shù)學(xué)變換,使圖像像素點(diǎn)相對(duì)位置發(fā)生變換,從而打亂原有圖像有序性,實(shí)現(xiàn)置亂。但無(wú)論經(jīng)過(guò)多么復(fù)雜的變換,圖像的灰度直方圖都不會(huì)發(fā)生改變。即:顏色值沒(méi)有發(fā)生改變,都存在一定的缺陷:圖像置亂后總體的色調(diào)沒(méi)有發(fā)生變化,給破解者留下可疑跡象;&如果攻擊者對(duì)像素進(jìn)行重新排列,用窮舉法進(jìn)行破解完全只是時(shí)間的問(wèn)題。為了增加置亂的效果和增加被破解的難度,可以在置亂過(guò)程中或者對(duì)置亂后的結(jié)果進(jìn)行可逆灰度變換??蓪?shí)現(xiàn)該功能的方法有很多,比較簡(jiǎn)單的方法就是:將置亂后圖像的每一像素與某一數(shù)值(x)異或來(lái)實(shí)現(xiàn),因?yàn)閍⊕x=b,而b⊕x=a⊕x,所以x=a,但x選取太小,直方圖的變化不夠明顯,選取太大可能會(huì)影響置亂效果,一般x選取圖像像素均值左右的值,即:

基于序列交叉變換的圖像置亂加密方法

2、核心偽代碼

基于序列交叉變換的圖像置亂加密方法

3、密碼機(jī)制

為了提高置亂的安全性,在實(shí)現(xiàn)置亂時(shí)可與密碼學(xué)相結(jié)合,可以設(shè)置密碼的方法有多種,在此只給出如表3所示方式。

基于序列交叉變換的圖像置亂加密方法

如可規(guī)定:q=1表示奇數(shù),q=2表示偶數(shù);p可為空格、逗號(hào)等;現(xiàn)設(shè)序列的長(zhǎng)度為101,此時(shí)序列的總長(zhǎng)度為奇數(shù),故q=1,假設(shè)還原所需次數(shù)為35,位間隔標(biāo)志用逗號(hào),異或數(shù)值選用128,補(bǔ)偶位置為100,則密碼可定為:1,35,128,100,當(dāng)序列長(zhǎng)度為偶數(shù)時(shí)不需要補(bǔ)偶位,但為了增大密碼空間,可設(shè)置兩個(gè)補(bǔ)偶位,補(bǔ)偶位對(duì)置亂的安全性有著很大的作用,一旦補(bǔ)偶位的位置錯(cuò)誤,圖像幾乎不可能還原。因此本文算法安全性較高,還原次數(shù)也有較大的空間,加入密碼生成機(jī)制后,保密空間更大,破解幾乎不可能。

4、還原次數(shù)的計(jì)算

還原次數(shù)k是滿足關(guān)系2k+1(mod(n+1))的最小整數(shù)解,即:k恰好是2模(n+1)的階,當(dāng)序列長(zhǎng)度n較大時(shí),很難用常規(guī)的方法算出k,需采用別的方法,常見(jiàn)的方法有:a、采用大數(shù)運(yùn)算算法計(jì)算;b、通過(guò)數(shù)學(xué)方法轉(zhuǎn)化求解,如采用歐拉定理;c、采用分塊的方法,將大圖片分解成容易計(jì)算的小塊,置亂后再合拼。

三、實(shí)驗(yàn)結(jié)果與分析

經(jīng)大量實(shí)驗(yàn)表明,本文加密算法置亂效果較好,限于篇幅有限,在此僅給出如圖3所示的實(shí)驗(yàn)結(jié)果。

基于序列交叉變換的圖像置亂加密方法

從實(shí)驗(yàn)結(jié)果可看出本文算法的置亂效果較好,經(jīng)一次置亂后隱蔽性已經(jīng)很強(qiáng),多次置亂后效果更佳,特別是采用可逆灰度變換后,直方圖發(fā)生了較大變化,圖像的置亂效果明顯增強(qiáng),幾乎看不出原圖的任何信息,破解幾乎不可能,但圖像在置亂k/2次時(shí)會(huì)出現(xiàn)倒立的情形,因此在讀出序列時(shí)應(yīng)避免采用順序方式,或選擇圖像文件加密次數(shù)時(shí)應(yīng)避開(kāi)k/2。

小知識(shí)之Hilbert曲線

是Hilbert作出的一條連續(xù)的,能夠過(guò)單位正方形的每一個(gè)點(diǎn)的曲線。