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

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

一、序列交叉變換原理

為了方便敘述,以1,2,3,...,10為例說明:假定1,2,3,...,10是一個給定的有序序列,從中間分成兩部分,采用隔位交叉對插的方法將其重新排序,經(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個數(shù)字反復(fù)進(jìn)行內(nèi)插的變化情況,初看起來序列似乎變得越來越亂,但經(jīng)5次內(nèi)插后,所得序列恰好是原序列的倒序,顯然,再經(jīng)5次內(nèi)插后序列將恢復(fù)原序;圖1也反映出各個數(shù)字的位置變化情況,內(nèi)插時,1移到2的位置,2移到4的位置等等。跟蹤箭頭的移動,我們可以看到10個數(shù)按以下次序互相取代:1,2,4,8,5,10,9,7,3,6,1,每內(nèi)插一次,這10個數(shù)就沿著上述循環(huán)過程向前推進(jìn)一步。由于這一循環(huán)總共有10步,因此,經(jīng)過10次內(nèi)插后,各個數(shù)都回到其起始位置上。

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

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

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

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

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

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

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

 

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

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

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

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

二、序列交叉變換原理

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

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

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

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

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

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

2、核心偽代碼

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

3、密碼機(jī)制

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

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

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

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

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

三、實驗結(jié)果與分析

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

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

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

小知識之Hilbert曲線

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