圖像加密算法之分形Hilbert曲線混合Gray碼加密

基于Hilbert曲線與Gray碼,我們提出兩種針對任意矩形彩色圖像的加密算法,其一是對圖像像素點的空域置亂,其二是對像素點的24位R、G、B分量的空域置亂,解密過程即加密過程的逆。

一、Hilbert曲線

1、二維Hilbert曲線

經典的二維Hilbert曲線的描述如下:首先將正方形四等分,求出各個小正方形的中心,并將它們連接,其次,將各個小正方形再細分為4個相同的小正方形;并連接各個小正方形的中心;……;按照這種分法不斷細分下去,并按一定規(guī)則一一連接,就可以得到如圖1的Hilbert曲線。

圖像加密算法之分形Hilbert曲線混合Gray碼加密
2、 三維Hilbert曲線

一階三維Hilbert曲線構造方法:將一立方體等分成8個小立方體,把8個小立方體的中心按一定的次序連接成一條曲線,即連成圖2的三維單元。以三維單元為基礎來構造高階三維Hilbert曲線,因為它是整個曲線形狀的基礎,所以又稱它為基元。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

n階三維Hilbert曲線構造方法:將一立方體等分成8個小立方體,每個小立方體用n-1階三維Hilbert曲線代替,然后按基元一樣的次序連接這8條n-1階三維Hilbert曲線。為使曲線更精美,對8條n-1階三維Hilbert曲線作適當?shù)男D使連接的首尾平行于一軸線,如圖3。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

3、Hilbert曲線圖像置亂

傳統(tǒng)意義上利用Hilbert曲線實現(xiàn)圖像置亂的思想:對圖像像素點按Hilbert曲線的規(guī)則遍歷,將其存入一維序列中,再重新排列生成置亂圖像。實踐證明,這種置亂算法應用性不強,如10×10大小的圖像則不能按此規(guī)則置亂。

兩種比較典型的算法,一種(算法1)是對非正方形圖像分成四塊滿足Hilbert遍歷規(guī)則的正方形塊,分別是左上角,左下角,右上角,右下角,使得圖像的每一部分至少
被置亂一次n1,這種算法比較繁瑣,增加了算法的時間復雜度。另一種(算法2)是對前者的改進,將像素點的R、G、B三色分量排列成一維序列,對于M×N的數(shù)字圖像,直接把3×M×N個圖像數(shù)據排列到一維數(shù)組pl[]中,假如2n-1<3×M×N<2n,則可對pl[]補上(2n-3×MxN)個值為-1的數(shù)據,選擇一條n階Hilbert曲線進行置亂處理,再把值為-1的數(shù)據去掉,余下的就是置亂后的圖像數(shù)據。該加密算法類似于對圖像像素進行填充,增加了原圖變換的工作量,如圖4。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

二、Gray變換

1、Gray碼

定義1對于任意一個非負整數(shù)u,其二進制碼記為糾=(uup-1up-217...u0u1)2,令:

圖像加密算法之分形Hilbert曲線混合Gray碼加密

i=1,2,…,p-1,則得到一個二進制表示的整數(shù)gu=(gpgp-1--g1go)2,變換式(l)稱為Gray變換,gu稱為的u的Gray碼,其中運算“0”為模2加法。

2、Gray碼圖像置亂

(1)基于位置:對于MxN階數(shù)字圖像,按一定順序對像素點進行編號,利用(N進制)Gray碼變換置亂圖像。

(2)基于色彩:保持像素點的位置不動,改變像素點的灰度(RGB)值。此時應先把像素點的R、G、B分量值用8位二進制碼表示,再利用二進制Gray碼變換。

如圖5,置亂圖1(64x64)是基于位置的變換,置亂圖2是基于色彩的變換。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

值得注意的是:對于基于位置的Gray變換,選取N進制和N進制的位數(shù)比較重要,如圖像大小為3 x4-12,則像素點不能實現(xiàn)位置置亂的一一映射。而基于色彩的Gray變換,加密效果十分差,且周期很短,在實際中不具有應用性。

三、矩形分割算法

將任意一個矩形圖像的長、寬(如果是長方體則是長、寬、高)通過矩形分割算法,對這兩(三)個數(shù)分裂相同的次數(shù),使長、寬(長、寬、高)分別分成2n(n=1,2…)段,即可將一個矩形(或者長方體)分成2nx2n(或者2nx2nx2n)塊,將這些分裂出來的矩形塊(或長方體塊)作為一個單元,這些單元滿足n階二維(或三)Hilbert曲線遍歷規(guī)則。

分割算法的詳細步驟如下:

對任意整數(shù)m1,m2,做式(2)運算:

圖像加密算法之分形Hilbert曲線混合Gray碼加密

假定被分裂的數(shù)為l,通過一次分裂出來的兩個數(shù)為l(0)l(1),則分裂規(guī)則為:

圖像加密算法之分形Hilbert曲線混合Gray碼加密

對m1,m2同時分裂M= Min(Mm1,Mm2)次,即可將兩個數(shù)分別分裂成2M等分。如圖6通過兩次分裂分成4x4=16小塊。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

四、圖像加密新算法

1、二維Hilbert曲線混合Gray碼空域重組矩形圖像像素點

(1)圖像分塊

將圖像的寬、高按矩形分割算法將圖像分成2nx2n小塊,將小塊利用n階Hilbert曲線遍歷,達到對小塊的置亂。由于矩形分割算法的特點,任意矩形圖像分出來的塊,最多只有一行塊和一列塊(或者只有一行塊,或者只有一列塊,或者沒有)內的像素點的個數(shù)不是2n(n∈N),如圖6為第一列塊和第三行塊內的像素點的個數(shù)不為2n(n∈N)。

(2)對小塊內像素點的處理

①若小塊內的像素點的個數(shù)為2n(n∈N),則可以選擇n位二進制位對小塊的像素點進行Gray碼位置置亂,假定圖像塊大小為2x4,對小塊內像素點進行編號(0,1,…,7),從而用3位二進制Gray碼變換重新排序像素點。

②若小塊內的像素點的個數(shù)不是2n(n∈N),比如3x3,則利用Gray色彩置亂順序遍歷小塊內的像素點。

實驗證明,小塊內像素點的Gray碼變換主要是降低像素點之間的相關性,單從視覺上來說,即使不對小塊Gray變換,圖像的置亂效果也是很不錯的,如圖7。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

2、三維Hilbert曲線混合Gray碼空域重組矩肜圖像24位

(1)將像素點對應的R、G、B分量值轉換為8位二進制數(shù),把圖像分成24個位平面,將像素點的24個位存入三維序列P3[k,i,j]中,其中i,j對應像素點的坐標,0≤k<24,如圖8。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

(2)將width,height,24這三個數(shù)按分割算法進行分裂,將長方體劃分為2nx2nx2n個小長方體塊,對應胛階三維Hilbert曲線遍歷規(guī)則。

(3)對小長方體塊內二進制位數(shù)據的處理,與上節(jié)中的對小塊處理類似,只不過從平面延伸到了空間,規(guī)則為:

①若小長方體塊內的元素個數(shù)為2n(n∈N),則選擇Gray碼位置置亂。

②若長方體塊內的元素個數(shù)不是2n(n∈N),則不做變換,因為小塊內存儲的元素是二進制位,如圖9。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

五、加密算法分析

(1)創(chuàng)新性

利用三維Hilbert曲線對彩色圖像的24位空域置亂,通過圖9可以發(fā)現(xiàn),對彩色圖像24位的空域置亂可以達到非常好的置亂效果,大大降低了像素之間的相關性。

(2)加密算法執(zhí)行效率

算法在.net 2005環(huán)境下編譯運行,機器配置為AMD 64Processor 2800+,內存1GB。對238×170圖像(圖4的原圖)分別用4種算法變換一次所需要的時間如表1。

圖像加密算法之分形Hilbert曲線混合Gray碼加密

通過表1發(fā)現(xiàn),基于二維Hilbert變換的新算法較這2種算法執(zhí)行效率都要高,而基于三維的Hilbert變換則要慢很多,這與三維空間中的數(shù)據量有關,但是其置亂效果是非常好的。

(3)安全性

由圖4、圖5、圖7、圖9可以看出,基于像素點的空間位置置亂可能會給解密者留有一個信息:如果原圖像是灰度圖,則加密后的圖像一定是灰度圖。然而基于24位的空域置亂加密后則不再是灰度圖,置亂圖接近混沌狀態(tài),大大提高了加密的可靠性。

小知識之遍歷

所謂遍歷(Traversal),是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點所做的操作依賴于具體的應用問題。 遍歷是二叉樹上最重要的運算之一,是二叉樹上進行其它運算之基礎。當然遍歷的概念也適合于多元素集合的情況,如數(shù)組。