面向Unicode編碼文檔的隱私碼字選擇方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于信息隱藏領(lǐng)域,具體涉及一種面向Unicode編碼文檔的字符編碼選擇 方法和系統(tǒng),以及相應(yīng)的信息隱藏方法。
【背景技術(shù)】
[0002] 在網(wǎng)絡(luò)飛速發(fā)展的今天,信息隱藏技術(shù)已經(jīng)廣泛應(yīng)用于多個(gè)領(lǐng)域。信息隱藏技術(shù) 中,文本文檔由于其特殊的結(jié)構(gòu)組成,在文本里面隱藏信息必須尋找那些不易引起人的視 覺感知的字符,我們稱之為不可見字符(或隱私字符)。常見的隱私字符包括空格、制表符、 回車等,其中空格分為ANSI編碼下的單字節(jié)空格和Unicode編碼下的雙字節(jié)空格。在本發(fā) 明中,主要針對(duì)的隱私字符就是指雙字節(jié)空格的集合。這種"雙字節(jié)空格"在Unicode編碼 中存在量大,且不易被視覺感知,可以很方便地被用于文本文檔中的信息隱藏。大量可選的 不可見字符碼字(或隱私碼字)還可以用來制作隱私字符編碼表,提升信息隱藏容量。
[0003] 但是這種"空格"在Unicode字符集中分布較為散亂,至今仍沒有一種方便可行的 選擇方法獲取大量的隱私碼字用于信息隱藏用途和編碼用途。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明針對(duì)上述問題,提出一種面向Unicode編碼文檔的隱私碼字選擇方法及系 統(tǒng),進(jìn)而提出一種信息隱藏方法。本發(fā)明中,隱私碼字也可稱為不可見字符碼字,隱私字符 也可稱為不可見字符。
[0005] 具體來說,本發(fā)明采用的技術(shù)方案如下:
[0006] -種面向Unicode編碼文檔的單個(gè)隱私碼字選擇方法,具體步驟如下:
[0007] (1) -個(gè)碼字m由2個(gè)字節(jié)組成,用X1X2表示(每一個(gè)X表示一個(gè)字節(jié))。一個(gè) 字節(jié)由8個(gè)比特組成,每4個(gè)比特用一個(gè)y表示,則一個(gè)碼字用y ny12y21y22表示,即X J2 = IwIyzU 22°
[0008] (2)通過事實(shí)驗(yàn)證,發(fā)現(xiàn)隱私碼字由X2決定,即X 受約束。所以,對(duì)于每一個(gè)隱 私字符,碼字Y11的選擇取值范圍是〇〇〇〇~1111,y12的選擇取值范圍是〇〇〇〇~1111。y 21 的選擇取值范圍是1101~1111,y22的選擇取值受y 21的選擇取值約束。
[0009] (3)當(dāng)y21的選擇取值為1101時(shí),的選擇取值范圍是1000~1111。當(dāng)y 21的選 擇取值為Ilio時(shí),y22的選擇取值范圍是〇〇〇〇~0110。當(dāng)y21的選擇取值為1111時(shí),^ 2的 選擇取值范圍是〇〇〇〇~1000。
[0010] 由上述步驟可以發(fā)現(xiàn),yn的最大選擇取值個(gè)數(shù)為16, y 12的最大選擇取值個(gè)數(shù)為 16,由于y22的選擇取值受y 21的影響,所以對(duì)于y 21的3種取值,y 21的3種最大選擇取值個(gè) 數(shù)為8、7、9,所以本發(fā)明方法的碼字選擇共有(16X16X(8+7+9) =6144)種。
[0011] -種基于上述方法的面向Unicode編碼文檔的隱私碼字選擇系統(tǒng),如圖1所示,所 述系統(tǒng)包含如下模塊:
[0012] 碼字選擇模塊,為滿足用戶對(duì)碼字分布及指定碼字的要求,本系統(tǒng)提供四種碼字 獲取的方式,分別為隨機(jī)獲取碼字(A)、連續(xù)獲取隨機(jī)碼字(B)、連續(xù)獲取指定碼字(C)、篩 選獲取隨機(jī)碼字(D)。在本模塊中,系統(tǒng)根據(jù)用戶數(shù)據(jù)中輸入的獲取碼字功能F,作出相應(yīng) 的處理。
[0013] 輸入模塊,本模塊需要用戶輸入請(qǐng)求的碼字個(gè)數(shù)n,并對(duì)碼字個(gè)數(shù)η進(jìn)行預(yù)判斷。 如圖2所示,如果0〈η〈 = 6144,則進(jìn)入碼字選擇模塊;否則,提示用戶輸入0~6144之間 的碼字個(gè)數(shù)(包括6144),并返回當(dāng)前模塊重新輸入。本模塊還需要用戶輸入獲取碼字功 能F,并對(duì)獲取碼字功能F進(jìn)行預(yù)判斷。如果F e [A,D],則進(jìn)入碼字選擇模塊;否則,提示 用戶輸入[A,D]之間的字母(不區(qū)分大小寫),并返回當(dāng)前模塊重新輸入。
[0014] 配置模塊,本模塊僅面向管理員開放,用于設(shè)置編碼表文件的存儲(chǔ)路徑、設(shè)置碼字 最大個(gè)數(shù)N以及輸出文件的保存路徑。
[0015] 結(jié)果輸出模塊,將從碼字選擇模塊得到的輸出結(jié)果輸出,以txt文件格式保存到 本地磁盤。
[0016] 所述碼字選擇模塊包含以下子模塊:
[0017] 隨機(jī)獲取子模塊,本模塊的作用是隨機(jī)獲取一個(gè)或多個(gè)碼字。為了保證該模塊 獲取過程的隨機(jī)性,需要首先設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子,再調(diào)用randO函 數(shù),它會(huì)根據(jù)隨機(jī)數(shù)種子值返回一個(gè)隨機(jī)數(shù)(0~32767)。設(shè)置randO產(chǎn)生隨機(jī)數(shù)時(shí)的 隨機(jī)數(shù)種子有多種方法,包括:利用srand((unsigned int)(time(NULL)))的方法,利用 srand( (unsigned int) (getpidO))的方法。其中time (NULL)用于獲取運(yùn)行程序的系統(tǒng)時(shí) 間作為隨機(jī)數(shù)種子,getpidO用于獲取運(yùn)行程序的進(jìn)程識(shí)別碼作為隨機(jī)數(shù)種子。
[0018] 連續(xù)獲取子模塊,假設(shè)當(dāng)前已獲取到的碼字標(biāo)號(hào)為IV則要保證后續(xù)k個(gè)碼字是繼 Hii之后連續(xù)的k個(gè)碼字,則m i之后的k個(gè)碼字(m i+1, mi+2,…,IniH)將被本模塊獲取。
[0019] 去重子模塊,本模塊作用是防止出現(xiàn)重復(fù)的碼字,首先把編碼表讀到緩存中,形成 一個(gè)數(shù)組A,A的元素值保存碼字,A的下標(biāo)保存碼字標(biāo)號(hào)。去重模塊具體實(shí)施步驟為:
[0020] (1)將N種隱私碼字按順序保存到數(shù)組A中,A的下標(biāo)存碼字的標(biāo)號(hào),A中的元素 存碼字,Count記錄取出碼字的個(gè)數(shù),初始值為0 ;
[0021] ⑵通過隨機(jī)獲取模塊生成一個(gè)[0,Ν-1]的碼字標(biāo)號(hào);
[0022] (3)將⑵選擇的碼字標(biāo)號(hào)取出,Count++,并將A中最后一個(gè)可用的碼字復(fù)制到 當(dāng)前位置,并且N-,返回(2);
[0023] (4)當(dāng)Count = η時(shí),不重復(fù)隨機(jī)碼字生成結(jié)束。
[0024] 一種文本文檔中的信息隱藏方法,包括如下步驟:
[0025] (1)發(fā)送方和接收方中的一方或雙方采用上述面向Unicode編碼文檔的隱私碼字 選擇系統(tǒng),選出滿足要求的N個(gè)(N為自然數(shù))隱私碼字;
[0026] (2)發(fā)送方和接收方利用選出的N個(gè)隱私碼字和雙方共享的一組秘密數(shù)字構(gòu)造編 碼表,用于文本文檔中的信息隱藏;
[0027] (3)發(fā)送方選擇載體對(duì)象,根據(jù)步驟(2)中生成的編碼表,通過信息嵌入將秘密消 息嵌入到載體對(duì)象中,得到帶秘載體;
[0028] (4)發(fā)送方將步驟(3)中得到的帶秘載體通過通信信道傳輸?shù)浇邮辗剑?br>[0029] (5)接收方根據(jù)步驟(2)中生成的編碼表,通過提取算法從步驟(4)中接收到的帶 秘載體中將秘密消息提取出來,得到秘密消息。
[0030] 與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
[0031] (1)提供一種面向Unicode編碼文檔的隱私碼字選擇方法,最多可以選擇6144種 隱私碼字,且方法易學(xué)易懂。
[0032] (2)提供一種面向Unicode編碼文檔的隱私碼字選擇系統(tǒng),該系統(tǒng)可以針對(duì)用戶 的不同選擇需求,選出滿足用戶要求的N個(gè)(N為自然數(shù))隱私碼字;獲取系統(tǒng)提供了 4種 碼字獲取方法,極大的方便了用戶獲取所需要的隱私碼字,且易操作。