一種抗最長匹配檢測的壓縮文件數(shù)據(jù)嵌入方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設及一種抗最長匹配檢測的壓縮文件數(shù)據(jù)嵌入方法及裝置,特別設及一種 基于deflate數(shù)據(jù)壓縮算法的抗最長匹配檢測的壓縮文件數(shù)據(jù)嵌入方法及裝置,屬于數(shù)據(jù) 安全技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 數(shù)據(jù)壓縮是在不丟失有用信息的條件下,W較短的數(shù)據(jù)編碼來代替原數(shù)據(jù),從而 減少數(shù)據(jù)的存儲空間的技術(shù)。在當前的信息數(shù)據(jù)量指數(shù)級增長的網(wǎng)絡大環(huán)境下,減少數(shù)據(jù) 的存儲空間對降低數(shù)據(jù)管理難度,減少數(shù)據(jù)傳輸代價等等具有必不可少的作用。
[0003] 數(shù)據(jù)壓縮算法可分為無損數(shù)據(jù)壓縮與有損數(shù)據(jù)壓縮,無損壓縮利用數(shù)據(jù)的統(tǒng)計冗 余進行壓縮,不存在信息損失,數(shù)據(jù)經(jīng)過壓縮之后能夠從壓縮數(shù)據(jù)當中準確的恢復出原數(shù) 據(jù),該使得無損壓縮的正確率要高得多,該種壓縮方法通常使用于文本壓縮當中。而有損 壓縮則會造成數(shù)據(jù)信息的一些丟失,該種壓縮使得壓縮后數(shù)據(jù)的大小顯著小于使用無損壓 縮,因此,倘若可W接收一定程度的信息丟失,則有損壓縮是一種十分高效的壓縮方法。有 損壓縮常常用于語音W及視頻壓縮當中。
[0004] Lempel-Ziv壓縮方法是由Abr址am Lempel和Jacob Ziv于1977-1978年提出的 一類十分經(jīng)典的無損數(shù)據(jù)壓縮方法,其中的核屯、算法是LZ77和LZ78算法。在該兩種算法 的基礎之上后來又派生出了許多其他算法并被普遍使用于各種壓縮軟件當中。
[0005]LZW算法(Lempel-Ziv-Welch)由LZ78算法改進而來,其基本原理是在壓縮W及解 壓過程中逐漸生成一個靜態(tài)字典,利用該靜態(tài)字典進行編碼,從而生成壓縮編碼序列。具體 壓縮過程是在當前待編碼位置對壓縮字典進行捜索,將捜索得到的最長匹配字符串對應的 索引值輸出,并且將最長匹配字符串與鄰接的下一個字符連接起來組成新的字符串加入字 典索引。LZW算法流程如圖1所示。
[0006] Def late算法是一種LZ77算法的改良算法,基于LZ77算法與化ffman滴編碼,其 算法流程如圖2所示。LZ77算法通過使用編碼器或者解碼器中已經(jīng)出現(xiàn)過的相應匹配數(shù) 據(jù)信息替換當前數(shù)據(jù)從而實現(xiàn)壓縮功能。該個匹配信息使用稱為長度-距離對的一對數(shù)據(jù) 進行編碼,它等同于"每個給定長度個字符都等于后面特定距離字符位置上的未壓縮數(shù)據(jù) 流。"Deflate算法在此基礎之上加入了一些改動使得其性能較LZ77有了很大進步。
[0007] 數(shù)據(jù)嵌入是一種信息隱藏技術(shù),所謂信息隱藏技術(shù)是指將秘密信息嵌入到數(shù)字化 載體當中,其目標不僅僅是通過與密碼學結(jié)合來對秘密信息進行加密,更重要的是讓隱藏 的密碼信息及其載體不會引起非法者的注意,也就減少了含秘數(shù)字載體被攻擊的風險。正 是基于數(shù)據(jù)壓縮與信息隱藏的相關(guān)知識基礎之上才誕生了壓縮文件數(shù)據(jù)嵌入方法。
[000引 目前流行的壓縮文件數(shù)據(jù)嵌入方法大多是基于LZW壓縮算法之上的。已有的LZW 算法的數(shù)據(jù)嵌入方法通常是根據(jù)待嵌入比特值來對算法產(chǎn)生的最長字符串長度進行修改, 使產(chǎn)生的字符串當中蘊含隱藏信息,解壓時可W據(jù)此來還原嵌入數(shù)據(jù)。然而由于該類數(shù)據(jù) 嵌入方法在嵌入過程當中對產(chǎn)生的字符串長度進行了直接修改,導致破壞了算法本身的匹 配規(guī)律,對手很有可能利用長度檢測的方法來識別出壓縮文件當中是否含有隱藏信息,進 而對其進行破解,該為數(shù)據(jù)嵌入的安全性留下了隱患。
[0009] 最長匹配檢測技術(shù)是基于已有的LZW壓縮算法數(shù)據(jù)嵌入方法產(chǎn)生的一種檢測方 法,能夠檢測出壓縮文件中是否含有嵌入數(shù)據(jù),進而可W使用相應的數(shù)據(jù)還原方法將嵌入 數(shù)據(jù)還原出來。其基本方法流程為:
[0010] 步驟一;獲取壓縮文件編碼,將之還原為對應的字符或字符串;
[0011] 步驟二:對還原出的字符串,取首字符連接到前一個還原出來的字符或字符串末 端組成新的字符串;對還原出來的字符,取該字符連接到前一個還原出來的字符或字符串 末端組成新的字符串;
[0012] 步驟對步驟二中得到的新的字符串,在算法已經(jīng)生成的字典當中尋找匹配,若 找到字典中已經(jīng)存在相同的字符串則檢測出該壓縮文件含有嵌入數(shù)據(jù);
[0013] 步驟四:對整個壓縮文件進行遍歷,只要出現(xiàn)滿足步驟=當中的現(xiàn)象即說明存在 嵌入數(shù)據(jù),否則說明該文件不存在嵌入數(shù)據(jù);
【發(fā)明內(nèi)容】
[0014] 針對上述缺陷,本發(fā)明的內(nèi)容是提出一種抗最長匹配檢測的壓縮文件數(shù)據(jù)嵌入方 法。
[0015] 由于在數(shù)據(jù)壓縮過程中每次生成的最長匹配字符串是唯一的,原有的LZW壓縮算 法數(shù)據(jù)嵌入算法總是著手對最長匹配字符串長度的修改使其嵌入隱藏數(shù)據(jù),因此執(zhí)行嵌入 數(shù)據(jù)過程中必定會導致原匹配字符串長度發(fā)生改變,該為長度檢測算法能夠檢測出嵌入數(shù) 據(jù)創(chuàng)造了條件。想要實現(xiàn)抗長度檢測必須要滿足在不改變已生成的字符串長度的情況下進 行數(shù)據(jù)嵌入。
[0016] LZ77算法的壓縮原理是在滑動窗口中捜索得到若干匹配字符串,分別計算其最大 匹配長度,再將其中最長匹配字符串所對應的[長度,偏移量,下一個字符]對輸出,W此來 進行數(shù)據(jù)壓縮。由于在捜索過程中字典為動態(tài)字典,其內(nèi)容不斷發(fā)生變化并且匹配過程產(chǎn) 生的最長匹配字符串一般來講有多個,該就為本發(fā)明數(shù)據(jù)嵌入創(chuàng)造了條件。Deflate算法 是基于LZ77算法的改進算法,將匹配字符串的輸出對減少為[長度,偏移量],從而提高了 壓縮算法效率。并且由于deflate算法中采用化ffman編碼,使得對手想直接利用最長匹 配檢測算法增加了復雜度從而提高了安全性,本發(fā)明中選擇Deflate算法作為數(shù)據(jù)嵌入算 法。算法數(shù)據(jù)嵌入流程如圖3所示。
[0017] 本發(fā)明是通過W下技術(shù)方案實現(xiàn)的:
[0018] 一種抗最長匹配檢測的壓縮文件數(shù)據(jù)嵌入方法,包括W下步驟:
[0019] A.將待嵌入數(shù)據(jù)轉(zhuǎn)化成二進制序列;
[0020] B. Deflate壓縮算法根據(jù)壓縮指令獲得壓縮等級,并根據(jù)壓縮等級獲得對應的最 佳匹配長度信息;
[0021] C. Deflate壓縮算法找出滑動窗口中具有與當前待編碼的若干字符相同哈希值的 地址并構(gòu)建鏈表;
[0022] D.算法調(diào)用最長匹配函數(shù),依次對鏈表內(nèi)存儲的地址計算出各匹配長度;
[0023] 最長匹配函數(shù)的返回值為最長匹配字符串的長度,鏈表內(nèi)存放的每個地址都會計 算出一個匹配長度;
[0024] E.對計算出的匹配長度與嵌入數(shù)據(jù)進行對比,符合條件則W當前匹配長度替換最 長匹配長度,使最后得到的最大匹配長度含有隱藏信息,遍歷鏈表后若最長匹配長度與初 始值相等或者大于最佳匹配長度,說明數(shù)據(jù)嵌入失敗,此時待嵌入數(shù)據(jù)指針不向后移動,等 待下一次計算匹配長度時再嵌入;否則,待嵌入數(shù)據(jù)指針向后移動;
[0025] F.函數(shù)返回最大匹配長度,若最大匹配長度與初始值相等則算法會輸出當前待壓 縮位置的單字節(jié)內(nèi)容,否則算法記錄下[最大匹配長度,偏移量]對;
[0026] G.滑動窗口向后移動最大匹配長度距離,重復C-F繼續(xù)下一輪壓縮,直到壓縮結(jié) 束。
[0027] 步驟B中的最佳匹配長度是deflate算法為了提高算法計算效率而引入的一種與 壓縮等級有關(guān)的常量。當算法遍歷哈希鏈表時,一旦某鏈表結(jié)點產(chǎn)生的匹配字符串長度大 于最佳匹配長度則不再繼續(xù)訪問該節(jié)點之后的鏈表,該樣使文件壓縮后大小變大,但大大 降低了算法計算的時間,是一種通過犧牲空間來成本換取時間減少的手段。
[002引步驟E中所述判斷是否符合條件的具體做法是在每次計算出來的匹配長