《電子技術應用》
您所在的位置:首頁 > 嵌入式技术 > 业界动态 > 一种基于Word文档的信息隐藏方法

一种基于Word文档的信息隐藏方法

2008-09-09
作者:刘显德,唐国维,富 宇,刘雪梅

  摘 要: 根據(jù)字符間距的變化實現(xiàn)了Word文檔中信息的隱藏,利用VBA語言編寫Word宏實現(xiàn)。
  關鍵詞: 信息隱藏" title="信息隱藏">信息隱藏 Word文檔 Word宏


1 文本信息隱藏
  文本信息隱藏是通過改變文本模式或改變文本的某些基本特征實現(xiàn)信息嵌入的方法,它使文檔產(chǎn)生一定的變化,但是這種變化對人的視覺是不可見的。與圖像和聲音文件相比,在文本里面隱藏信息是比較困難的。因為它幾乎不包含任何冗余信息,因此在文本里面隱藏信息必須尋找那些不易引起視覺感知的方法。目前在文本中主要有以下三種編碼方法[2]:
  (1)行移編碼。該技術通過垂直移動文本行的位置實現(xiàn),通常當一行被上移或下移時,與其相鄰的兩行或其中的一行保持不動,不動的相鄰行被看作是解碼過程中的參考位置。如可以規(guī)定行上移表示“0”,下移表示“1”。根據(jù)要嵌入文本中信息的二進制位內(nèi)容,編碼器將文本中若干個行上移或下移來隱藏信息。解碼器同樣根據(jù)文檔中相鄰行的行間距的差別進行信息的提取。
  (2)字移編碼。與行移編碼類似,字移編碼技術" title="編碼技術">編碼技術通過使文本行內(nèi)字符發(fā)生平移,即利用字間距的變化嵌入需要隱藏的信息。采用這種方式時,相鄰字之間的距離各不相同。  (3)特征編碼。在特征編碼方法中,觀察文本文檔并選擇一些特征量,再根據(jù)要嵌入的數(shù)據(jù)修改這些特征。特征可以是字母如b、d、h、k等中的垂直線,其長度可稍作修改以使得一般人不易發(fā)覺。相對某種給定的字體可以改變其字符高度,總有一些字母特征未作改變以幫助解碼。
  本文結(jié)合字移編碼技術在Word文檔中利用VBA編程語言" title="編程語言">編程語言實現(xiàn)了信息的隱藏和提取,完成了一個編碼器和一個解碼器。
2 Word文檔中信息隱藏與提取的實現(xiàn)
  在Word文檔中實現(xiàn)信息隱藏的方法是改變文檔中字符的間距。在一篇正常的Word文檔中字符間距通常是標準形式,即字符間距為0磅,也可以將某兩個字符的間距設為0.1磅。例如,若需要隱藏一個二進制串01100101(即字符a),此時可以在Word文檔中某個位置開始的連續(xù)9個字符的文本串,將其中的兩兩字符間距分別設為0磅、0.1磅、0.1磅、0磅、0磅、0.1磅、0磅、0.1磅,這樣實現(xiàn)信息的隱藏。提取過程與此相反,根據(jù)文檔字符間的不同間距形成被隱藏的二進制串。
  下面分析該方法的可行性。根據(jù)文獻[2]所述,人眼無法辨認1/150英寸以內(nèi)的間距變化,此間距為0.16993mm,而本文所采用的0.1磅間距變化為0.05405mm,此間距變化要小于文獻[2]中所述的值。下面是利用該方法的實驗結(jié)果。
  下一行是Word文檔中字符間距全為0磅的正常顯示樣式:
  在在在在在在在在在在在在在在在在
  下一行是在其中隱藏了01100101二進制串的文本顯示樣式:
  在在在在在在在在在在在在在在在在
  大量的實驗結(jié)果也顯示,這樣的間距變化人眼是幾乎無法辨認的。
  利用上述方法在Word中實現(xiàn)信息隱藏的關鍵是如何控制和提取文檔中字符的間距。本文利用VBA語言實現(xiàn)了兩個Word宏進行信息的隱藏和提取。
  VBA語言是針對微軟Office文檔進行操作的語言,它可以對Office文檔的各種操作進行編程。下面給出該方法的VBA實現(xiàn)算法和程序的主要流程。
  Sub Hide() ′以下是實現(xiàn)信息隱藏的Word宏
  Dim i As Integer
  Dim ch As Byte
  Dim ch1 As Byte

  ch = Asc(“a”) ′ch變量中存放需要隱藏的字符
  m = 128
    Selection.HomeKey Unit:=wdStory ′將文檔中的插入點移到文檔首部
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.MoveRight Unit:=wdCharacter, Count:=1 ′選擇信息隱藏的位置,此處為文檔的第三行
    For i = 1 To 8 ′每次循環(huán)隱藏一位二進制位
??? Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.MoveRight Unit:=wdCharacter, Count:=2,
      Extend:=wdExtend
        在文檔中選中兩個相鄰的字符
  With Selection.Font
  ch1 = ch And m
  If ch1 = m Then
  .Spacing = 0.1
  Else
  .Spacing = 0
  End If
  m = m / 2
    End With
     ′ch變量中的每一個二進制位利用位運算分別取出來,以設置文檔中被選中的兩個字符的間距
  Next i
??? End Sub
  上述Hide宏實現(xiàn)了在Word文檔中隱藏一個8位的二進制串(即一個英文字符),若需要隱藏一個字符串,則只需重復上述過程。
  下面是從Word文檔中提取被隱藏信息的宏。
  Sub Get()
  Dim i As Integer
  Dim ch As Byte
  Dim m As Byte
  Dim k As Byte

  ch = 0
  Selection.HomeKey Unit:=wdStory
  Selection.MoveDown Unit:=wdLine, Count:=2
  Selection.MoveRight Unit:=wdCharacter, Count:=1
     ′在文檔中定位到被隱藏信息的位置
  m = 128
  k = 0
  For i = 1 To 8   
         ′每次循環(huán)提取出一個被隱藏的二進制位
  Selection.MoveLeft Unit:=wdCharacter, Count:=1
  Selection.MoveRight Unit:=wdCharacter, Count:=2
  Selection.MoveRight Unit:=wdCharacter, Count:=2,
      Extend:=wdExtend
          在文檔中選中兩個相鄰的字符
  With Selection.Font
  If .Spacing = 0 Then
  ch = ch And k
  Else
  ch = ch Or m
  End If
  k = k + m
  m = m / 2
  End With
  ′將提取出的每一個二進制位利用位運算形成一個8位二進制串(即一個字符)
    Next i
    MsgBox (CStr(Chr(ch)))
     ′利用對話框" title="對話框">對話框顯示所提取的信息。
??? End Sub
  上述算法給出在文檔中確定位置的隱藏和提取,在實際應用中也可以采用非確定的位置,如按照文檔中某些特征確定隱藏位置,也可以將隱藏的位置分散到文檔中的不同位置。該方法對于信息的隱藏量是比較高的,若一篇文檔有5001個字符,則最多可隱藏5000個二進制位。另外,也可以采用間距變化分別為0磅、0.1磅、0.2磅與0.3磅實現(xiàn)四進制數(shù)位的隱藏,但這樣會加大字符間距變化的幅度,可能會引起懷疑。該方法的缺點是在文檔進行重新排版時,所隱藏的信息會丟失或產(chǎn)生錯誤;也正是由于這個特性,可以利用它實現(xiàn)Word文檔中的數(shù)字水印,起到一定的產(chǎn)權保護作用。
參考文獻
1 鈕心 ,楊義先.文本偽裝算法研究.電子學報,2003;(3)402~405
2 曹衛(wèi)兵,戴冠中.基于文本的信息隱藏技術.計算機應用" title="計算機應用">計算機應用研究,2003;(10):39~41

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權者。如涉及作品內(nèi)容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關內(nèi)容