專利名稱:一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼和解碼方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息編碼技術(shù)領(lǐng)域,具體涉及一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼和解碼方法。
背景技術(shù):
信息隱藏技術(shù)是研究如何將某一信息隱藏于另一公開(kāi)的信息中,然后通過(guò)公開(kāi)的傳輸來(lái)傳遞隱藏的信息。由于含有隱藏信息的媒體發(fā)布是公開(kāi)的,而可能的檢測(cè)者難以從公開(kāi)信息中判斷隱藏信息是否存在,更加難以截獲隱藏信息,從而達(dá)到保證信息的安全的目的。如數(shù)字水印技術(shù),它作為一種有效的數(shù)字產(chǎn)品版權(quán)的保護(hù)和數(shù)據(jù)安全維護(hù)技術(shù),是信息隱藏技術(shù)研究領(lǐng)域的一個(gè)分支。數(shù)字水印技術(shù)是將具有特定意義的標(biāo)記(水印),利用數(shù)字嵌入的方法隱藏在數(shù)字圖像、聲音、文檔、圖書(shū)、視頻等數(shù)字產(chǎn)品中,用以證明創(chuàng)作者對(duì)其作品的所有權(quán),同時(shí)通過(guò)對(duì)水印的檢測(cè)和分析來(lái)保證數(shù)字信息的完整性和可靠性,從而成為知識(shí)產(chǎn)權(quán)保護(hù)和數(shù)字多媒體防偽的有效手段。在數(shù)字水印技術(shù)中,嵌入的標(biāo)記即水印,代表一定意義的內(nèi)容,它可以是文本、聲音、圖像或者視頻等信號(hào),但是無(wú)論是何種類型,在進(jìn)行水印的嵌入時(shí),多數(shù)的算法都要求將它首先轉(zhuǎn)化為二值(0和1或-1和1)的序列,也就是說(shuō)水印信息是一個(gè)代表一定意義的字節(jié)流或字節(jié)串,檢測(cè)后便可以很快地讀取所隱藏的內(nèi)容信息。當(dāng)然為了防止攻擊者從載體中獲得水印數(shù)據(jù)后直接了解水印信息的內(nèi)容,可以使用一定的手段將水印信息變成一個(gè)看似雜亂無(wú)章的二值序列,比如通過(guò)加密或圖像的置亂算法,檢測(cè)出的數(shù)據(jù)字節(jié)流只要經(jīng)過(guò)解密或者圖像的置亂算法的逆運(yùn)算操作后,檢測(cè)者便同樣可以完全解析出字節(jié)流信息所代表的確切含義。
但是在實(shí)際應(yīng)用中,很多時(shí)候往往需要嵌入的不僅僅是簡(jiǎn)單的字節(jié)流信息,還需要嵌入結(jié)構(gòu)性信息數(shù)據(jù),只有通過(guò)一定方法分解出多種字段信息,才能獲取其代表的含義。如在安全文檔打印技術(shù)中,可以通過(guò)文檔底部附加的背景底紋來(lái)嵌入水印信息,在文檔打印的過(guò)程中,可以在背景底紋中埋入打印者的名字、打印機(jī)的名字、打印時(shí)間、計(jì)算機(jī)的物理地址等信息,并將背景底紋數(shù)據(jù)跟正常的文檔數(shù)據(jù)予以同時(shí)打印。必要時(shí)可以通過(guò)掃描文檔獲得圖像數(shù)據(jù),進(jìn)行檢測(cè)后得到字節(jié)信息流,此時(shí)表現(xiàn)出的信息不具有完整的意義,需要額外的字段分解工作才能獲得各個(gè)字段信息。雖然讀取的是各個(gè)獨(dú)立字段的信息,但是嵌入前卻需要事先將各個(gè)字段信息組合成一個(gè)完整的字節(jié)流。任何信息隱藏技術(shù)預(yù)處理的對(duì)象都是一個(gè)完整的信號(hào)序列,該信號(hào)序列應(yīng)該做到在盡可能小的長(zhǎng)度范圍內(nèi)隱藏盡可能多的信息。目前的技術(shù)不能很好地解決這個(gè)問(wèn)題,其主要的缺陷在沒(méi)有合理的編碼方法,為了盡可能多地編碼信息,不存儲(chǔ)結(jié)構(gòu)體中的各字段名稱,所以只能編碼特定的結(jié)構(gòu)性信息,比如編碼上述用于描述安全文檔打印的結(jié)構(gòu)化數(shù)據(jù);結(jié)構(gòu)化信息中的每個(gè)子字段內(nèi)容固定分配一定的最大長(zhǎng)度,即使該字段的內(nèi)容不夠或者為空時(shí),仍就分配了定長(zhǎng)的存儲(chǔ)空間,從而造成了編碼空間的浪費(fèi);由于結(jié)構(gòu)化信息的各子字段內(nèi)容和長(zhǎng)度固定,無(wú)法動(dòng)態(tài)實(shí)現(xiàn)擴(kuò)展;由于編碼方式的限制,只有事先知道結(jié)構(gòu)體的構(gòu)成以及各子字段的長(zhǎng)度限制才能正確解碼出編碼信息。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的缺陷,提出一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼和解碼方法。該方法能夠?qū)崿F(xiàn)信號(hào)序列應(yīng)該做到在盡可能小的長(zhǎng)度范圍內(nèi)隱藏盡可能多的信息,并且結(jié)構(gòu)化信息的各子字段內(nèi)容和長(zhǎng)度能夠動(dòng)態(tài)擴(kuò)展,不需要事先知道結(jié)構(gòu)體也能夠正確地讀取和分解字段。
為達(dá)到以上目的,本發(fā)明采用的技術(shù)方案是一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼和解碼方法,包括以下步驟(1)獲取和處理結(jié)構(gòu)化信息得到一個(gè)完整的信號(hào)序列,所述的結(jié)構(gòu)化信息是指包含多個(gè)獨(dú)立子字段名稱和內(nèi)容的信息的集合;(2)將記錄冗余信息的字節(jié)流與步驟(1)得到的信號(hào)序列結(jié)合;(3)將步驟(2)中結(jié)合后的信號(hào)序列進(jìn)行加密和數(shù)據(jù)校驗(yàn)處理,得到最終的編碼信號(hào)序列。
進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟(1)中獲取要進(jìn)行編碼處理的結(jié)構(gòu)化信息,分解出各字段名字和各字段的內(nèi)容,并取出它們的數(shù)據(jù)代碼組合成一個(gè)子串字節(jié)流,然后將各子串字節(jié)流合并成一個(gè)信號(hào)序列;再進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟(1)中分解出各字段名字和各字段的內(nèi)容時(shí),把字段內(nèi)容純?yōu)閿?shù)字的項(xiàng)直接轉(zhuǎn)化為二進(jìn)制方式(0或1)表示,然后與代表相應(yīng)字段名字的字節(jié)流合并,并標(biāo)識(shí)該字段的內(nèi)容為數(shù)字形式;
進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟(1)中,在分析各字段名字和各字段內(nèi)容時(shí),通過(guò)相應(yīng)的代碼頁(yè)把Unicode編碼的雙字節(jié)字符轉(zhuǎn)為單字節(jié)的字符串。
進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟(2)中,用冗余字節(jié)流記錄以下各項(xiàng)標(biāo)識(shí)信息代碼頁(yè)、總字段個(gè)數(shù)、各字段名稱的長(zhǎng)度、字段內(nèi)容的長(zhǎng)度、是否為數(shù)字信息,并將該冗余字節(jié)流插入到信號(hào)序列的前面得到一個(gè)新的序列;進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟(3)中,使用密鑰將步驟(2)中得到的新序列進(jìn)行加密處理,并使用通用的數(shù)據(jù)校驗(yàn)算法對(duì)得到的密文字節(jié)流串進(jìn)行數(shù)據(jù)校驗(yàn),最后將得到的校驗(yàn)數(shù)據(jù)插入到密文串的最前面得到最終編碼后的信號(hào)序列。所述的通用的數(shù)據(jù)校驗(yàn)算法是循環(huán)冗余校驗(yàn)碼算法。
與上述編碼方法相對(duì)應(yīng)的,一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,包括以下步驟a.解碼時(shí)首先獲取編碼信號(hào)序列;b.在信號(hào)序列的首部取出校驗(yàn)數(shù)據(jù)進(jìn)行數(shù)據(jù)正確性校驗(yàn),校驗(yàn)通過(guò)后執(zhí)行步驟c,否則執(zhí)行步驟e;c.使用相同的密鑰對(duì)校驗(yàn)后的信號(hào)序列進(jìn)行解密處理,還原明文字節(jié)流信號(hào)序列;d.根據(jù)信號(hào)序列前面部分的冗余信息逐步進(jìn)行字段分解和轉(zhuǎn)換;e.退出解碼過(guò)程,并顯示解碼后的信息。
進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟b中使用循環(huán)冗余校驗(yàn)碼算法對(duì)密文字節(jié)串進(jìn)行正確性校驗(yàn),數(shù)據(jù)校驗(yàn)過(guò)程結(jié)束后,將校驗(yàn)數(shù)據(jù)從信號(hào)序列中刪除;如果步驟b中數(shù)據(jù)正確性校驗(yàn)不通過(guò)時(shí),則在步驟e中直接顯示空字符。
進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,步驟d中,根據(jù)冗余信息字節(jié)流計(jì)算出下列信息代碼頁(yè)、總字段個(gè)數(shù)、各字段名稱的長(zhǎng)度、字段內(nèi)容的長(zhǎng)度、是否為數(shù)字信息,并將這部分字節(jié)流從c得到的信號(hào)序列中刪除。
再進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,根據(jù)各字段名稱的長(zhǎng)度和字段內(nèi)容的長(zhǎng)度依次從在步驟d中得到的信號(hào)序列中分解出各字段名稱和字段內(nèi)容,然后把非數(shù)字的字段名稱和字段內(nèi)容的字節(jié)流通過(guò)代碼頁(yè)轉(zhuǎn)換為Unicode寬字符串。
再進(jìn)一步,為使本發(fā)明獲得更好的發(fā)明效果,將步驟d中分解出的數(shù)字形式的字段內(nèi)容轉(zhuǎn)化直接轉(zhuǎn)化為數(shù)字進(jìn)行顯示。
本發(fā)明的效果在于本發(fā)明說(shuō)的結(jié)構(gòu)化信息的編碼和解碼方法支持各種字符集類型,各字段信息的格式多種多樣,信號(hào)序列中的各字段信息排列方式比較合理,包含的信息量大;結(jié)構(gòu)化信息的長(zhǎng)度可變,不需要事先知道結(jié)構(gòu)體便可以正確地讀取和分解字段;信息的安全系數(shù)和正確識(shí)別率都有大幅度提高,并具備一定的抗干擾和檢查糾錯(cuò)能力。本發(fā)明所述的方法允許混合編碼多種信息,支持單字符集或多字符集,可廣泛應(yīng)用于通信、電子文檔及打印文檔等技術(shù)領(lǐng)域。
圖1是存儲(chǔ)代碼頁(yè)的字節(jié)示意圖;圖2是存儲(chǔ)字段個(gè)數(shù)的字節(jié)示意圖;圖3是包含字段名稱長(zhǎng)度、字段內(nèi)容長(zhǎng)度和是否為數(shù)字的標(biāo)識(shí)的字節(jié)示意圖;圖4是字段名稱和字段內(nèi)容合并存儲(chǔ)的示意圖;圖5是帶有冗余信息的信號(hào)序列示意圖;圖6是用密鑰加密后的密文字節(jié)串示意圖;圖7是含有CRC-16校驗(yàn)碼的信號(hào)序列示意圖;圖8是本發(fā)明所述的結(jié)構(gòu)化信息的編碼方法流程圖;圖9是本發(fā)明所述的結(jié)構(gòu)化信息的解碼方法流程圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式
做進(jìn)一步的描述如圖1所示,十六個(gè)方格代表兩個(gè)字節(jié),用于標(biāo)識(shí)當(dāng)前結(jié)構(gòu)體中字符串所屬的代碼頁(yè)(Code Page),在明文編碼信號(hào)序列中,它處于序列中最前面兩個(gè)字節(jié)的位置。在很多時(shí)候接收的是Unicode編碼或雙字節(jié)輸入,而對(duì)于單字節(jié)字符,比如ASCII碼字符,同樣是用兩個(gè)字節(jié)存儲(chǔ)。如果進(jìn)行編碼時(shí)也用兩個(gè)字節(jié)標(biāo)識(shí)的話,會(huì)造成很大的空間浪費(fèi)。此時(shí)如果知道代碼頁(yè),便可以把輸入的雙字節(jié)字符串轉(zhuǎn)換為單字節(jié)字符串,從而節(jié)省了空間,并實(shí)現(xiàn)單位編碼序列長(zhǎng)度內(nèi)藏入了更多的信息。進(jìn)行解碼時(shí),也可以通過(guò)代碼頁(yè)將單字節(jié)字符串轉(zhuǎn)換為Unicode編碼序列,從而能正確的解碼和顯示。
如圖2所示,一個(gè)字節(jié)用于標(biāo)識(shí)結(jié)構(gòu)體中子字段的個(gè)數(shù),也就是說(shuō)最多可以編碼255個(gè)字段信息,可以滿足一般結(jié)構(gòu)體的信息編碼,當(dāng)然必要時(shí)可以擴(kuò)展為兩個(gè)或者更多字節(jié)大小。
如圖3所示,同樣代表了兩個(gè)字節(jié)大小的空間,總共分為三段內(nèi)容。最左邊的一位代表是否為數(shù)字形式,其中“1”代表數(shù)字形式,“0”為非數(shù)字形式,因?yàn)閿?shù)字信息可用更少的字節(jié)來(lái)表示。比如輸入一個(gè)計(jì)算機(jī)的IP地址為“172.16.255.254”,如果用字符串來(lái)表示的話至少需要11個(gè)字符,但是在計(jì)算機(jī)內(nèi)存中用四個(gè)unsigned char變量就可以表示它,所以在編碼序列中它只占用四個(gè)字節(jié)的空間。中間的7位用來(lái)標(biāo)識(shí)各字段名稱的長(zhǎng)度,此時(shí)字段名稱的長(zhǎng)度限制為127個(gè)字節(jié)。最后的兩個(gè)字節(jié)標(biāo)識(shí)每個(gè)字段內(nèi)容的長(zhǎng)度,共計(jì)65535個(gè)字,同樣根據(jù)需要這兩個(gè)長(zhǎng)度都可以進(jìn)行擴(kuò)充。在進(jìn)行編碼時(shí),標(biāo)識(shí)所有字段的名稱長(zhǎng)度和字段內(nèi)容長(zhǎng)度的字節(jié)組合成為一個(gè)子串,排在標(biāo)識(shí)所有字段個(gè)數(shù)的字節(jié)后面,該子串的長(zhǎng)度為所有字段數(shù)的三倍。
如圖4所示,標(biāo)識(shí)的多個(gè)字節(jié)分為兩部分,第一部分存儲(chǔ)字段的名稱,所用字節(jié)的個(gè)數(shù)已經(jīng)保存在圖3的中間部分;第二部分存儲(chǔ)字段的內(nèi)容,所用字節(jié)的個(gè)數(shù)已經(jīng)保存在圖3的右邊部分。每個(gè)字段的名稱和字段的內(nèi)容首位相連組成一個(gè)子串,然后再跟其他字段的組成的子串順序合并成一個(gè)長(zhǎng)的子串,代表了編碼信號(hào)序列中真正有意義的內(nèi)容。在進(jìn)行解碼時(shí),根據(jù)圖3所示的字段名稱的長(zhǎng)度和字段內(nèi)容的長(zhǎng)度逐級(jí)進(jìn)行分解,直至得到各個(gè)字段的名稱和字段內(nèi)容信息,然后再將得到各字結(jié)構(gòu)組成一個(gè)完整的結(jié)構(gòu)體。
如圖5所示,標(biāo)識(shí)了含有冗余信息的整個(gè)信號(hào)序列的結(jié)構(gòu)組成,其中包括四個(gè)部分。第一部分存儲(chǔ)了圖1所示的代碼頁(yè)示意圖,用于標(biāo)識(shí)結(jié)構(gòu)體中字符串所屬的字符集,以便于字符的正確解碼和顯示,也可以節(jié)省存儲(chǔ)空間;第二部分存儲(chǔ)了結(jié)構(gòu)體中字段的個(gè)數(shù);第三部分為圖3示意圖所代表內(nèi)容;最后一部分中的每一個(gè)子結(jié)構(gòu)分別存儲(chǔ)了各個(gè)字段名稱和字段內(nèi)容信息。
由圖5可以看出,含有冗余信息的整個(gè)信號(hào)序列完全是一個(gè)明文字節(jié)串,如果任何解碼者截獲這段字節(jié)流便可以很快地讀懂其中隱藏的內(nèi)容信息,為了安全性的考慮,使用密鑰對(duì)該明文字節(jié)串進(jìn)行加密,從而得到如圖6所示的密文字節(jié)串,密鑰由特定的解碼者保存,即使獲取了這些字節(jié)串也不能正確地翻譯出真實(shí)內(nèi)容。
下面結(jié)合一個(gè)實(shí)施例進(jìn)一步闡述整個(gè)的編碼和解碼過(guò)程,如圖8所示,一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,包括如下步驟首先,對(duì)可變長(zhǎng)度結(jié)構(gòu)化信息進(jìn)行編碼的方法,包括以下步驟(1)獲取和處理結(jié)構(gòu)化信息得到一個(gè)完整的信號(hào)序列;在文檔打印的過(guò)程中,有時(shí)需要附加打印額外信息,如用戶名稱、計(jì)算機(jī)的IP地址、打印時(shí)間和日期以及用戶自定義信息。首先將這些信息組合成為一個(gè)結(jié)構(gòu)體,其中包括每個(gè)子字段的名稱和內(nèi)容信息,具體描述如下a)用戶名稱SupermanQww;
b)計(jì)算機(jī)IP地址172.16.7.191;c)打印日期的年份2005;d)打印日期的月份11;e)打印日期的日期14;f)打印時(shí)間的小時(shí)12;g)打印時(shí)間的分鐘30;h)打印時(shí)間的秒數(shù)15;i)用戶自定義字符本文檔必須通過(guò)password才能閱讀。
在上述的結(jié)構(gòu)體中,每個(gè)子結(jié)構(gòu)的前半部分為字段名稱,后半部分為字段的具體內(nèi)容信息。結(jié)構(gòu)體中所有字符采用的代碼頁(yè)為936(ANSI/OEM-Simplified Chinese(PRC,Singapore)),用于存儲(chǔ)的兩個(gè)字節(jié)如圖1所示。通過(guò)代碼頁(yè)將上述結(jié)構(gòu)中的所有字符全部轉(zhuǎn)換為單字節(jié)流表示,尤其對(duì)于最后一個(gè)子結(jié)構(gòu)中用戶自定義的字符信息,轉(zhuǎn)換后的字節(jié)流可以節(jié)省出8個(gè)字節(jié)的空間。
接下來(lái)計(jì)算結(jié)構(gòu)體中的字段個(gè)數(shù)為9,用一個(gè)字節(jié)記錄如圖2所示,放在代碼頁(yè)字節(jié)的后面。在解碼時(shí),讀取該字節(jié)得到字段的總個(gè)數(shù)后,接著順序讀取27個(gè)字節(jié)數(shù)據(jù),其中每三個(gè)相鄰字節(jié)所構(gòu)成的子結(jié)構(gòu)代表的信息如圖3所示。在本實(shí)施例中,(2)~(8)子結(jié)構(gòu)中的第一位均為“1”,(1)和(9)子結(jié)構(gòu)的第一位均為“0”。作為例子,具體分析一下子結(jié)構(gòu)(2)中三個(gè)字節(jié)的組成情況100011000000000000000100,其中第一位的“1”表示該字段的內(nèi)容為數(shù)字形式,接下來(lái)的0001100代表字段的名稱的長(zhǎng)度為12,最后的16位代表字段內(nèi)容的長(zhǎng)度為4。由圖3所示的子結(jié)構(gòu)的個(gè)數(shù)為9,共占27個(gè)字節(jié)的空間。編碼的真正實(shí)際內(nèi)容是由一串子結(jié)構(gòu)組成,其中每個(gè)子結(jié)構(gòu)包括兩部分,分別為順序連接的字段名稱和字段內(nèi)容。同樣在結(jié)構(gòu)(2)中,字段名稱為“計(jì)算機(jī)IP地址”,而字段的內(nèi)容“172.16.7.191”可以用四個(gè)字節(jié)來(lái)表示,分別為10101100、00010000、00000111和10111111。由于前面字段內(nèi)容長(zhǎng)度的字節(jié)中標(biāo)識(shí)了其長(zhǎng)度為4,在讀取該段字節(jié)流時(shí),自動(dòng)分解為四個(gè)數(shù)字,而不是按照字符的方式進(jìn)行處理。將其他子結(jié)構(gòu)類似處理后得到一個(gè)包含各子字段名稱和內(nèi)容的明文信號(hào)序列。
(2)將記錄冗余信息的字節(jié)流與步驟(1)得到的信號(hào)序列結(jié)合;將圖3所示的字節(jié)流追加到代碼頁(yè)字節(jié)和字段長(zhǎng)度字節(jié)的后面組成冗余信息序列,然后與步驟(1)得到的信號(hào)序列結(jié)合后得到一個(gè)完整的明文信號(hào)序列,如圖5所示。當(dāng)然冗余信息字節(jié)流跟實(shí)際內(nèi)容字節(jié)流的順序可以交換。
(3)將步驟(2)中結(jié)合后的信號(hào)序列進(jìn)行加密和數(shù)據(jù)校驗(yàn)處理,得到最終的編碼信號(hào)序列;為了提高信息編碼的安全系數(shù),首先使用密鑰對(duì)上述步驟(2)中得到的明文信號(hào)序列進(jìn)行加密處理,該密鑰由相關(guān)的解碼者保存,并作為密碼進(jìn)行輸入。解碼者首先輸入密碼,然后用輸入密碼作為密鑰進(jìn)行解密,只有密碼正確時(shí)才能獲知信息序列的全部具體內(nèi)容,從而保證信息在傳播過(guò)程中具備很高的安全性。
然后使用通用的數(shù)據(jù)校驗(yàn)算法對(duì)加密處理后的密文字節(jié)流處理,計(jì)算校驗(yàn)數(shù)據(jù)。本實(shí)施例中,選擇循環(huán)冗余校驗(yàn)(CRC)碼計(jì)算得到16位的校驗(yàn)碼,并將校驗(yàn)碼信息插入到密文信息串的前面,得到最終的編碼信號(hào)序列,如圖7所示。其中的校驗(yàn)碼部分主要是用來(lái)檢測(cè)時(shí)進(jìn)行數(shù)據(jù)正確性校驗(yàn)。
本實(shí)施例中,上述的結(jié)構(gòu)化信息在文檔打印過(guò)程中同時(shí)予以打印,隱藏信息的載體為紙介質(zhì)的文檔。而需要解碼時(shí),必須先通過(guò)掃描儀或其他圖像獲取設(shè)備將文檔數(shù)字化,再通過(guò)數(shù)字圖像處理方法識(shí)別出藏入的密文字節(jié)流。但是為了克服在打印和掃描過(guò)程中帶來(lái)的各方面的攻擊,并盡可能地減小信息恢復(fù)的誤差,使用循環(huán)冗余校驗(yàn)碼算法對(duì)密文字節(jié)串進(jìn)行正確性校驗(yàn),得到的校驗(yàn)碼插入到密文信息序列的前面,負(fù)責(zé)驗(yàn)證所有信息的正確性,比如本實(shí)施例中選擇CRC-16校驗(yàn)碼,得到兩個(gè)字節(jié)數(shù)據(jù)校驗(yàn)碼,跟密文字節(jié)串一起合并為最終編碼信號(hào)序列。
如圖9所示,本發(fā)明所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,包括以下步驟a.解碼時(shí)首先獲取編碼信號(hào)序列;解碼時(shí)必須將從圖像中識(shí)別出來(lái)原始字節(jié)流作為輸入,先取出序列中最前面的標(biāo)識(shí)校驗(yàn)數(shù)據(jù)的字節(jié),本實(shí)施例中,密文序列的前兩個(gè)字節(jié)標(biāo)識(shí)CRC-16校驗(yàn)數(shù)據(jù)。
b.在信號(hào)序列的首部取出校驗(yàn)數(shù)據(jù)進(jìn)行數(shù)據(jù)正確性校驗(yàn),校驗(yàn)通過(guò)后執(zhí)行步驟c,否則執(zhí)行步驟e;用提取出的校驗(yàn)數(shù)據(jù)進(jìn)行數(shù)據(jù)正確性驗(yàn)證,如果校驗(yàn)不通過(guò),則提示錯(cuò)誤信息并顯示空字符;數(shù)據(jù)校驗(yàn)過(guò)程通過(guò)后,將標(biāo)識(shí)校驗(yàn)數(shù)據(jù)的字節(jié)從原始字節(jié)流中刪除,從而得到一個(gè)新的字節(jié)串O1。
c.使用相同的密鑰對(duì)校驗(yàn)后的信號(hào)序列進(jìn)行解密處理,還原明文字節(jié)流信號(hào)序列;將用戶正確輸入的密碼作為密鑰解密文字節(jié)串O1,得到明文字節(jié)串O2。
d.根據(jù)信號(hào)序列前面部分的冗余信息逐步進(jìn)行字段分解和轉(zhuǎn)換;O2字節(jié)串包含預(yù)先定義的冗余信息,取出序列的前兩個(gè)字節(jié)便可以計(jì)算出字符串所屬的代碼頁(yè),這里代碼頁(yè)為936。通過(guò)第三個(gè)字節(jié)計(jì)算出結(jié)構(gòu)體中字段的總個(gè)數(shù)為9,接著順序截取27個(gè)字節(jié),依次平均為為9組,分別判斷每個(gè)字段是否為數(shù)字形式,并且計(jì)算每個(gè)字段名稱長(zhǎng)度和字段內(nèi)容的長(zhǎng)度,從而根據(jù)這些信息在剩余的字節(jié)流中順序提取出各字段的名稱和字段的內(nèi)容信息。最后根據(jù)字段內(nèi)容的是否為數(shù)字形式的屬性分別進(jìn)行處理,對(duì)于子結(jié)構(gòu)(1)和(9)分別利用代碼頁(yè)將單字節(jié)字符串轉(zhuǎn)換為Unicode統(tǒng)一編碼,進(jìn)而正確顯示輸出;對(duì)于子結(jié)構(gòu)(2)~(8),分別轉(zhuǎn)換為數(shù)字形式進(jìn)行輸出。
本實(shí)施例中,結(jié)構(gòu)體中的打印時(shí)間和打印日期的顯示方式可以有多種,比如打印日期可以顯示為“YYYY-MM-DD”、“DD-MM-YYYY”等。
e.退出解碼過(guò)程,并顯示解碼后的信息。
本發(fā)明所述的編碼和解碼方法適用于任何信息隱藏算法,編碼后的序列包含完整的數(shù)據(jù)結(jié)構(gòu)信息,在不需要知道結(jié)構(gòu)體信息的前提下,仍能正確的識(shí)別和讀?。徊⑶揖幋a方式比較合理,利于結(jié)構(gòu)體信息的任意擴(kuò)展。當(dāng)然進(jìn)行編碼傳輸和信息嵌入時(shí),可以使用任何數(shù)據(jù)壓縮方法對(duì)信號(hào)序列進(jìn)一步處理,以期獲得更短的編碼長(zhǎng)度。
上述步驟只是一個(gè)優(yōu)選的實(shí)施方式。本領(lǐng)域技術(shù)人員不難得出其他的實(shí)施方法而不違背本發(fā)明的總體思想。
其中,標(biāo)識(shí)各種冗余信息的字節(jié)長(zhǎng)度、排列方式以及字段名稱和字段內(nèi)容的組合方式都可以發(fā)生變化。
其中,對(duì)于密文字節(jié)串可以使用不同的數(shù)據(jù)校驗(yàn)方法,還可以根據(jù)隱藏方法的不同添加數(shù)據(jù)校正的冗余信息,比如使用多余的奇偶校驗(yàn)位。
權(quán)利要求
1.一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,包括以下步驟(1)獲取和處理結(jié)構(gòu)化信息得到一個(gè)完整的信號(hào)序列,所述的結(jié)構(gòu)化信息是指包含多個(gè)獨(dú)立子字段名稱和內(nèi)容的信息的集合;(2)將記錄冗余信息的字節(jié)流與步驟(1)得到的信號(hào)序列結(jié)合;(3)將步驟(2)中結(jié)合后的信號(hào)序列進(jìn)行加密和數(shù)據(jù)校驗(yàn)處理,得到最終的編碼信號(hào)序列。
2.如權(quán)利要求1所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,其特征是步驟(1)中獲取要進(jìn)行編碼處理的結(jié)構(gòu)化信息,分解出各字段名字和各字段的內(nèi)容,并取出它們的數(shù)據(jù)代碼組合成一個(gè)子串字節(jié)流,然后將各子串字節(jié)流合并成一個(gè)信號(hào)序列。
3.如權(quán)利要求2所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,其特征是步驟(1)中分解出各字段名字和各字段的內(nèi)容時(shí),把字段內(nèi)容純?yōu)閿?shù)字的項(xiàng)直接轉(zhuǎn)化為二進(jìn)制方式表示,然后與代表相應(yīng)字段名字的字節(jié)流合并,并標(biāo)識(shí)該字段的內(nèi)容為數(shù)字形式。
4.如權(quán)利要求1所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,其特征是步驟(1)中,在分析各字段名字和各字段內(nèi)容時(shí),通過(guò)相應(yīng)的代碼頁(yè)把Unicode編碼的雙字節(jié)字符轉(zhuǎn)為單字節(jié)的字符串。
5.如權(quán)利要求1所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,其特征是步驟(2)中,用冗余字節(jié)流記錄以下各項(xiàng)標(biāo)識(shí)信息代碼頁(yè)、總字段個(gè)數(shù)、各字段名稱的長(zhǎng)度、字段內(nèi)容的長(zhǎng)度、是否為數(shù)字信息,并將該冗余字節(jié)流插入到信號(hào)序列的前面得到一個(gè)新的序列。
6.如權(quán)利要求1、2、3、4或5所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,其特征是步驟(3)中,使用密鑰將步驟(2)中得到的新序列進(jìn)行加密處理,并使用通用的數(shù)據(jù)校驗(yàn)算法對(duì)得到的密文字節(jié)流串進(jìn)行數(shù)據(jù)校驗(yàn),最后將得到的校驗(yàn)數(shù)據(jù)插入到密文串的最前面得到最終編碼后的信號(hào)序列。
7.如權(quán)利要求6所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼方法,其特征是步驟(3)中,通用的數(shù)據(jù)校驗(yàn)算法是循環(huán)冗余校驗(yàn)碼算法。
8.一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,包括以下步驟a.解碼時(shí)首先獲取編碼信號(hào)序列;b.在信號(hào)序列的首部取出校驗(yàn)數(shù)據(jù)進(jìn)行數(shù)據(jù)正確性校驗(yàn),校驗(yàn)通過(guò)后執(zhí)行步驟c,否則執(zhí)行步驟e;c.使用相同的密鑰對(duì)校驗(yàn)后的信號(hào)序列進(jìn)行解密處理,還原明文字節(jié)流信號(hào)序列;d.根據(jù)信號(hào)序列前面部分的冗余信息逐步進(jìn)行字段分解和轉(zhuǎn)換;e.退出解碼過(guò)程,并顯示解碼后的信息。
9.如權(quán)利要求8所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,其特征是步驟b中使用循環(huán)冗余校驗(yàn)碼算法對(duì)密文字節(jié)串進(jìn)行正確性校驗(yàn)。
10.如權(quán)利要求9所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,其特征是步驟b中數(shù)據(jù)校驗(yàn)過(guò)程結(jié)束后,將校驗(yàn)數(shù)據(jù)從信號(hào)序列中刪除。
11.如權(quán)利要求10所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,其特征是步驟b中數(shù)據(jù)正確性校驗(yàn)不通過(guò)時(shí),在步驟e中直接顯示空字符。
12.如權(quán)利要求8、9、10或11所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼和解碼方法,其特征是步驟d中,根據(jù)冗余信息字節(jié)流計(jì)算出下列信息代碼頁(yè)、總字段個(gè)數(shù)、各字段名稱的長(zhǎng)度、字段內(nèi)容的長(zhǎng)度、是否為數(shù)字信息,并將這部分字節(jié)流從步驟c中得到的信號(hào)序列中刪除。
13.如權(quán)利要求12所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,其特征是根據(jù)各字段名稱的長(zhǎng)度和字段內(nèi)容的長(zhǎng)度依次從在步驟d中得到的信號(hào)序列中分解出各字段名稱和字段內(nèi)容,然后把非數(shù)字的字段名稱和字段內(nèi)容的字節(jié)流通過(guò)代碼頁(yè)轉(zhuǎn)換為Unicode寬字符串。
14.如權(quán)利要求13所述的一種可變長(zhǎng)度結(jié)構(gòu)化信息的解碼方法,其特征是將步驟d中分解出的數(shù)字形式的字段內(nèi)容轉(zhuǎn)化直接轉(zhuǎn)化為數(shù)字進(jìn)行顯示。
全文摘要
本發(fā)明涉及一種可變長(zhǎng)度結(jié)構(gòu)化信息的編碼和解碼方法,屬于信息編碼技術(shù)領(lǐng)域?,F(xiàn)有技術(shù)中,信息隱藏技術(shù)中嵌入結(jié)構(gòu)性信息數(shù)據(jù)即信號(hào)序列時(shí),無(wú)法做到在盡可能小的長(zhǎng)度范圍內(nèi)隱藏盡可能多的信息。本發(fā)明所述的方法,所有的子字段信息構(gòu)成一個(gè)結(jié)構(gòu)化的信息,不同的字段編碼代表不同的含義,組合成完整的信號(hào)序列;在信號(hào)序列的前面插入一定數(shù)量的冗余字節(jié),使用特殊的密鑰將信號(hào)序列進(jìn)行加密后,再進(jìn)行數(shù)據(jù)正確性檢驗(yàn),最后將校驗(yàn)碼插入信息序列的密文串的前面得到最終的序列。采用本發(fā)明所述的方法,各字段信息的格式可以多樣,信號(hào)序列中的各字段信息排列方式比較合理,包含的信息量大,信息的安全系數(shù)和正確識(shí)別率都有大幅度提高。
文檔編號(hào)H03M7/30GK1777040SQ20051013432
公開(kāi)日2006年5月24日 申請(qǐng)日期2005年12月14日 優(yōu)先權(quán)日2005年12月14日
發(fā)明者亓文法, 程盛遠(yuǎn), 楊斌, 史文哲 申請(qǐng)人:北京北大方正電子有限公司, 北京大學(xué)