專利名稱:用隨機(jī)子序列加密數(shù)字圖像的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字圖像的加密,防止數(shù)字圖像中的信息被未經(jīng)許可者窺視。
背景技術(shù):
將數(shù)字圖像的數(shù)據(jù)重新排序可以使數(shù)字圖像面目全非,Arnold變換、幻方算法和混沌圖像置亂算法等引起人們的普遍關(guān)注(例如北方工業(yè)大學(xué)學(xué)報(bào)第11卷第1期1999年3月“關(guān)于Arnold變換的周期性”和“矩陣變換及其在圖像信息隱藏中的應(yīng)用研究”、中國(guó)圖象圖形學(xué)報(bào)第10卷第5期2005年“基于排序變換的混沌圖像置亂算法”等)。打亂數(shù)字圖像的最直接方法莫過(guò)于將數(shù)字圖像數(shù)據(jù)字節(jié)按照隨機(jī)序列重新排列,而由程序語(yǔ)言逐次調(diào)用隨機(jī)函數(shù)rnd()就能方便地制造隨機(jī)序列的元素Rn=int(L*rnd()),其中L是數(shù)字圖像的長(zhǎng)度(以字節(jié)為單位),int()是取整數(shù)。可是有兩個(gè)問(wèn)題需要解決一是簡(jiǎn)單地利用公知的隨機(jī)序列加密數(shù)字圖像容易破解;二是剔除數(shù)值上重復(fù)的序列元素要花費(fèi)許多時(shí)間。本發(fā)明解決了這兩個(gè)問(wèn)題,有利于數(shù)字圖像加密的普及應(yīng)用。
發(fā)明內(nèi)容
本發(fā)明的目的是提高利用已有隨機(jī)序列加密數(shù)字圖像的破解難度,提高含數(shù)字圖像的系統(tǒng)的安全性能。已有的隨機(jī)序列可以是公知的隨機(jī)序列也可以是其他隨機(jī)序列。
為了達(dá)到發(fā)明的上述目的,首先提供了從已有的隨機(jī)序列構(gòu)造子序列的方法,然后提供了用子序列加密數(shù)字圖像的方法即子序列控制圖像數(shù)據(jù)字節(jié)重新排序和用字節(jié)值與255之差隨機(jī)替代字節(jié)值的方法。
圖1為連續(xù)錄用母序列元素構(gòu)造子序列的方框2為在子序列控制下從母序列產(chǎn)生新子序列的方框3為產(chǎn)生用于指定映像空位的子序列的方框4為用子序列加密數(shù)字圖像的方框5是數(shù)字圖像加密和解密的流程圖。
圖6示例待加密的RGB24格式的數(shù)字圖像圖7示例保留了.bmp文件頭的加密后圖像圖8示例待加密的JPEG格式的數(shù)字圖像圖9示例保留了.jpg文件頭和標(biāo)記的加密后圖像具體實(shí)施方式
把已有的隨機(jī)序列稱為母序列,從母序列構(gòu)造子序列就是從已有的隨機(jī)序列構(gòu)造子序列。截取母序列的有限長(zhǎng)度的一段,丟棄其中一些元素并錄用其余部分就成為子序列。
構(gòu)造子序列的最簡(jiǎn)單方法就是連續(xù)錄用母序列的t個(gè)元素,t為整數(shù),如圖1所示。在圖1中,常數(shù)C為選用的整數(shù),它限制母序列和子序列的元素取值范圍為0到C-1。函數(shù)rnd()的所有各次調(diào)用確定了母序列Rr的元素R0,R1,R2,....,Rn,....,其中首次調(diào)用函數(shù)rnd()確定了R0=int(C*rnd()),第n次調(diào)用函數(shù)rnd()確定了Rn=int(C*rnd())等等。子序列Sa連續(xù)錄用了母序列從Rn到Rn+t-1的t個(gè)元素A0=Rn;A1=Rn+1;.....;At-1=Rn+t-1這樣產(chǎn)生的子序列與母序列的某一段相吻合,若直接用于加密較易破解,但可以用于控制母序列元素的丟棄或錄用從而產(chǎn)生新的子序列。
利用已經(jīng)產(chǎn)生了的子序列控制母序列元素的丟棄或錄用,由此產(chǎn)生的新子序列用于加密就難以猜破。圖2說(shuō)明用子序列控制母序列元素的丟棄或錄并產(chǎn)生新子序列的原理。作為例子,其中用于控制的已有子序列Sa的元素An取值小于4的整數(shù),相當(dāng)于圖1中的C=4所產(chǎn)生的子序列。圖2中的常數(shù)D為選用的整數(shù),它限制母序列和新子序列Sb的元素取值范圍為0到D-1,L是新子序列Sb的指定長(zhǎng)度。在圖2中,參數(shù)可以自由選擇,參數(shù)值不同使得所產(chǎn)生的新子序列也不同。
參數(shù)n指定截取母序列的起點(diǎn);控制規(guī)則例如可將圖中的“Ai=0或Ai=3”改為當(dāng)Ai=1時(shí)錄用母序列的元素;子序列Sa的元素取值范圍例如圖中的“Ai可能取值0,1,2,3”可改為取值0或1;
控制規(guī)則應(yīng)與子序列Sa元素的取值范圍相配合。參數(shù)成為恢復(fù)數(shù)字圖像的“鑰匙”的一部分。產(chǎn)生子序列Sa的參數(shù)(例如連續(xù)錄用母序列的起點(diǎn))通過(guò)影響子序列Sa進(jìn)而影響新子序列Sb,所以也成為“鑰匙”的一部分。當(dāng)子序列Sa是由幾段較短序列拼接而成時(shí)影響新子序列Sb的參數(shù)就更多了。參數(shù)越多、參數(shù)可選擇的范圍越大使得破解的難度也越大。
用子序列將數(shù)字圖像重新排序最容易想到的方案是要求子序列長(zhǎng)度等于圖像數(shù)據(jù)的長(zhǎng)度L、子序列元素的取值應(yīng)為0到L-1并且子序列元素的取值不能重復(fù)。這并不難實(shí)現(xiàn),例如在圖2中取D=L并在X點(diǎn)插入一個(gè)核查方框子序列新賦值的元素若與已有元素在數(shù)值上相同,丟棄這個(gè)新賦值的元素并重新尋找下一個(gè)可錄用的母序列元素。可是這個(gè)方法隨著子序列已有元素的增加,因?yàn)閿?shù)值重復(fù)而丟棄新賦值元素越來(lái)越頻繁,運(yùn)行消耗很長(zhǎng)時(shí)間。
本發(fā)明另辟新途預(yù)備一個(gè)與待加密數(shù)字圖像的大小(字節(jié)數(shù))相等的圖像,以下稱為映像。映像中的圖像數(shù)據(jù)字節(jié)都作為空位并將被待加密的數(shù)字圖像的字節(jié)逐個(gè)替代,以L表示映像中初始空位總數(shù)。映像中的空位按其字節(jié)序號(hào)的先后編號(hào),稱為空位號(hào)。初始的空位號(hào)與字節(jié)序號(hào)一致。子序列Sb的第0個(gè)元素B0的數(shù)值代表待加密數(shù)字圖像中字節(jié)序號(hào)0對(duì)應(yīng)映像的L個(gè)空位中的一個(gè)空位號(hào),該字節(jié)從待加密數(shù)字圖像填入映像的對(duì)應(yīng)空位使得映像的空位總數(shù)減少為L(zhǎng)-1個(gè),因而映像中的空位號(hào)變得與字節(jié)序號(hào)不盡相同。子序列Sb的第1個(gè)元素B1的數(shù)值代表待加密數(shù)字圖像中字節(jié)序號(hào)1對(duì)應(yīng)映像的L-1個(gè)空位中的一個(gè)空位號(hào),該字節(jié)從待加密數(shù)字圖像填入映像的對(duì)應(yīng)空位并使映像中的空位總數(shù)減少為L(zhǎng)-2個(gè)并且空位號(hào)再次變化。以此類推,直到待加密數(shù)字圖像中最后一個(gè)(第L-1個(gè))字節(jié)填入映像剩余的第0個(gè)空位,填滿數(shù)據(jù)的映像就是加了密的數(shù)字圖像??梢钥闯?,子序列Sb的每一個(gè)元素的值都唯一地指定映像中的一個(gè)空位,元素間數(shù)值上可能的重復(fù)并不影響加密操作。圖3說(shuō)明用于指定映像空位的子序列Sb的產(chǎn)生過(guò)程。隨著待加密數(shù)字圖像的數(shù)據(jù)字節(jié)逐個(gè)填入映像使得映像中的空位數(shù)目逐個(gè)減少,所以子序列Sb的元素取值范圍是隨元素序號(hào)遞減的。圖4說(shuō)明用子序列加密數(shù)字圖像的原理。變量V作為載體把待加密數(shù)字圖像的字節(jié)傳遞給映像的空位。圖4中使用了兩個(gè)子序列,都與圖像數(shù)據(jù)等長(zhǎng)(L)。其中子序列Sb用于指定映像空位,是按照?qǐng)D3構(gòu)成的。子序列Sc則用于控制圖像數(shù)據(jù)字節(jié)的值V是否用255-V替代。子序列Sc是按照?qǐng)D2構(gòu)成的,元素取值0或1(D=2)。計(jì)算機(jī)程序遷移數(shù)據(jù)總是按字節(jié)序號(hào)來(lái)遷移數(shù)據(jù)的,因此有必要把子序列Sb的元素指定的映像空位號(hào)“翻譯”成映像字節(jié)序號(hào)。標(biāo)志序列Ff具有L個(gè)初始值為0的元素。映像中每有一個(gè)空位被填入數(shù)據(jù),依據(jù)該空位在映像中的字節(jié)序號(hào),將Ff的相同序號(hào)的元素賦值為1作為標(biāo)志。對(duì)Ff的數(shù)值為0的元素計(jì)數(shù)S與元素序號(hào)j的關(guān)系正是映像中空位號(hào)與字節(jié)序號(hào)的對(duì)應(yīng)關(guān)系。填滿后的映像就是加了密的數(shù)字圖像。
要從映像恢復(fù)原數(shù)字圖像,預(yù)備一個(gè)與待加密數(shù)字圖像的大小(字節(jié)數(shù))相等的圖像,以下稱為反映像。反映像中的圖像數(shù)據(jù)字節(jié)都作為空位并將被映像的字節(jié)逐個(gè)替代。用上述加密的逆過(guò)程把數(shù)據(jù)字節(jié)從映像逐個(gè)填入反映像。填滿后的反映像就是解密圖像并且與加密前的數(shù)字圖像完全相同。加密過(guò)程和解密過(guò)程共享產(chǎn)生各子序列的所有參數(shù),各自產(chǎn)生子序列。加密過(guò)程和解密過(guò)程產(chǎn)生的子序列完全相同。加密過(guò)程和解密過(guò)程的不同僅僅在于圖像數(shù)據(jù)的遷移方式。加密過(guò)程是把依字節(jié)序號(hào)大小排列的數(shù)據(jù)字節(jié)填入由子序列指定的映像中的空位從而打亂了數(shù)據(jù)字節(jié)原有的排列。解密過(guò)程是把由子序列指定的映像中尚未提取過(guò)的的字節(jié)依反映像的字節(jié)序號(hào)順序填入反映像從而恢復(fù)了數(shù)據(jù)字節(jié)原有的排列。圖5是數(shù)字圖像加密和解密的流程圖。
圖像數(shù)據(jù)的排列是有格式的,例如常用的RGB格式(.bmp文件)和JPEG格式(.jpg文件),不同格式通常有各自的文件頭和標(biāo)記。本發(fā)明的加密方法允許把文件頭和標(biāo)記都當(dāng)成圖像數(shù)據(jù)一起加密,使用非常簡(jiǎn)單,但是加密后的數(shù)字圖像因?yàn)槠茐牧宋募^和標(biāo)記所以在解密之前不能顯示,只有解密之后才能顯示。在實(shí)際應(yīng)用中經(jīng)許可的觀看者并不需要在解密之前顯示打亂了的圖像??墒瞧谱g高手有可能將竊取到的數(shù)據(jù)嵌入一幅正常圖像中來(lái)窺視竊取到的數(shù)字圖像。為此在考察加密效果時(shí)有必要保留文件頭和標(biāo)記,僅將色彩和灰度數(shù)據(jù)加密,不經(jīng)解密直接顯示,看原圖像的信息是否已經(jīng)完全隱藏。圖6是待加密的RGB24格式的數(shù)字圖像,圖7是保留了文件頭的加密后圖像,解密后圖像與圖6完全相同。圖8是待加密的JPEG格式的數(shù)字圖像,圖9是保留了文件頭和標(biāo)記的加密后圖像,解密后圖像與圖8完全相同。從圖7和圖9看不出原圖像的痕跡。
權(quán)利要求
1.一種加密數(shù)字圖像的方法,其特征是利用已有的隨機(jī)序列作為母序列,先從母序列產(chǎn)生子序列,然后用子序列而非母序列對(duì)數(shù)字圖像加密,包括以下步驟預(yù)備一個(gè)與待加密數(shù)字圖像的大小(字節(jié)數(shù))相等的圖像,以下稱為映像,映像中的圖像數(shù)據(jù)字節(jié)在待加密的數(shù)字圖像數(shù)據(jù)填入之前稱為空位;連續(xù)錄用母序列的一段元素產(chǎn)生子序列,再用由此產(chǎn)生的子序列控制對(duì)于母序列元素的錄用或丟棄從而產(chǎn)生兩個(gè)新的子序列用于加密數(shù)字圖像;依待加密圖像的字節(jié)序號(hào)順序逐個(gè)提取待加密圖像的字節(jié),上一步驟產(chǎn)生的用于加密數(shù)字圖像的兩個(gè)子序列中的一個(gè)子序列用于控制每個(gè)字節(jié)的數(shù)值替代為(255-字節(jié)數(shù)值)或不替代,然后填入另一個(gè)子序列指定的映像中的空位,填滿后的映像就是已經(jīng)加了密的數(shù)字圖像,以上是加密步驟;以下是解密步驟,預(yù)備一個(gè)與待加密數(shù)字圖像的大小(字節(jié)數(shù))相等的圖像,以下稱為反映像;采用與加密時(shí)相同的參數(shù)和相同的方法產(chǎn)生兩個(gè)子序列用于解密數(shù)字圖像,它們與加密時(shí)產(chǎn)生的用于加密數(shù)字圖像的兩個(gè)子序列完全相同;上一步驟產(chǎn)生的用于解密數(shù)字圖像的兩個(gè)子序列中的一個(gè)子序列用于指定逐個(gè)提取映像中尚未提取的字節(jié),另一個(gè)子序列控制每個(gè)字節(jié)的數(shù)值替代為(255-字節(jié)數(shù)值)或不替代,然后依反映像的字節(jié)序號(hào)順序填入反映像,填滿后的反映像就是已經(jīng)解了密的數(shù)字圖像。
2.根據(jù)權(quán)利要求1的一種加密數(shù)字圖像的方法,其中所說(shuō)的待加密圖像的字節(jié)填入另一個(gè)子序列指定的映像中的空位和一個(gè)子序列用于指定逐個(gè)提取映像中尚未提取的字節(jié)填入反映像,所說(shuō)的這兩個(gè)子序列的元素取值范圍是隨元素序號(hào)遞減的,并且容許元素之間在數(shù)值上重復(fù)。
3.根據(jù)權(quán)利要求1的一種加密數(shù)字圖像的方法,其中所說(shuō)的將待加密圖像的字節(jié)填入子序列指定的映像中的空位,是通過(guò)對(duì)映像中的空位計(jì)數(shù)取得該空位在映像中的字節(jié)序號(hào),然后按該字節(jié)序號(hào)填入來(lái)實(shí)現(xiàn)的。
4.根據(jù)權(quán)利要求1的一種加密數(shù)字圖像的方法,其中所說(shuō)的在解密時(shí)采用與加密時(shí)相同的參數(shù)和相同的方法產(chǎn)生兩個(gè)子序列用于解密數(shù)字圖像,所說(shuō)的參數(shù)包括截取母序列的起點(diǎn)、控制錄用和丟棄母序列元素的規(guī)則以及子序列元素的取值范圍,還包括產(chǎn)生這兩個(gè)子序列時(shí)用于控制對(duì)于母序列元素的錄用或丟棄的子序列的這些參數(shù),參數(shù)是解密與加密共享的鑰匙的一部分。
全文摘要
利用已有的隨機(jī)序列作為母序列,從母序列產(chǎn)生子序列。子序列又可以用于控制對(duì)于母序列元素的錄用或丟棄從而產(chǎn)生新的子序列。產(chǎn)生子序列的參數(shù)越多、參數(shù)可選擇的范圍越大,則破解的難度也越大。兩個(gè)子序列用于加密數(shù)字圖像。其中一個(gè)子序列為圖像的數(shù)據(jù)字節(jié)指定新位置實(shí)現(xiàn)重新排序,該子序列的元素取值范圍是隨元素序號(hào)遞減的,并且容許元素之間在數(shù)值上重復(fù)。另一個(gè)子序列控制數(shù)據(jù)字節(jié)的值是否替代為該值與255之差。對(duì)一幅圖像的RGB24格式文件和JPEG格式文件加密后,都看不到原圖像的痕跡。
文檔編號(hào)G06T1/00GK1787009SQ20051020076
公開(kāi)日2006年6月14日 申請(qǐng)日期2005年12月5日 優(yōu)先權(quán)日2005年12月5日
發(fā)明者徐原能 申請(qǐng)人:徐原能