java bmp信息隐藏_BMP图像信息隐藏及检测
1.實驗目的
(1)了解BMP圖像文件格式
(2)了解利用BMP圖像文件隱藏信息的原理
(3)掌握基于24位真彩色BMP圖像的文件信息隱藏方法
2.實驗內容
(1)在圖像數據后隱藏信息
(2)文件頭與圖像數據之間隱藏信息
(3)BMP圖像文件隱藏信息的檢測
(4)在圖像文件頭和信息有的保留字段中隱藏信息
(5)灰度、二值圖像的其他信息隱藏及檢測(擴展)
3.實驗原理
實驗所使用的工具為:matlab2020a
針對文件結構的信息隱藏方法需詳細掌握文件格式,利用文件結構塊之間的關系或根據塊數據和塊大小之間的關系來隱藏信息。
BMP(Bitmap-File)圖形文件是Windows采用的常見圖形文件格式,要利用BMP位圖進行信息隱藏首先需要詳細了解BMP文件的格式,BMP圖像文件結構比較單一而且固定,BMP圖像由文件頭、信息頭、調色板區和數據區四個部分組成,而24位真彩色圖像中沒有調色板信息。24位真彩色BMP位圖文件包括3部分。第一部分是BMP文件頭。前2個字節是“BM”,是用于識別BMP文件的標志;第3、4、5、6字節存放的是位圖文件的大小,以字節為單位;第7、8、9、10字節是保留的,必須為0;第11、12、13、14字節給出位圖陣列相對于文件頭的偏移,在24位真彩色圖像中,這個值固定為54;19,20,21,22表示的是圖像文件的寬度,以像素為單位;23,24,25,26表示的是圖像文件的高度,以像素為單位。第二部分是位圖信息頭。從第29個字節開始,第29、30字節描述的是像素的位數,24位真彩色位圖。該位的值位0x18;第三部分是數據區。從第55個字節開始,每3個字節表示一個像素,這3個字節依次表示該像素的紅、綠、藍亮度分量值。
在不影響圖像正常顯示情況下,可使用以下四種方法在24位真彩色BMP圖像中隱藏信息。
在圖像文件尾部添加任意長度的數據,秘密信息存放在文件尾部可以減少修改文件頭的數據量,僅需修改文件頭中文件長度的值即可。
在調色板或者位圖信息頭和實際的圖像數據之間隱藏數據,如果將秘密數據放在文件頭與圖像數據之間,則至少需要修改文件頭中文件長度、數據起始偏移地址這兩個域的值。
修改文件頭和信息頭中的保留字段隱藏信息。
在圖像像素區利用圖像寬度字節必須是4的倍數的特點,在補足位處隱藏數據。
4.實驗記錄
(1)在實際的圖像數據后隱藏數據
待隱藏的秘密信息文件名稱為hidden.txt,xxx1.bmp為載體圖像,將載體和秘密信息放置在同一個目錄下,在Windows的MS-DOS方式下執行命令Copy xxx1.bmp /b + hidden.txt /a xxx2.bmp,其中參數/b指定以二進制格式復制、合并文件,參數/a以ASCII格式復制、合并文件。執行該命令后,生成一個新的xxx2.bmp文件,使用圖像瀏覽工具瀏覽該文件發現與原始載體圖像幾乎完全相同,信息隱藏在baboon.bmp文件的尾部。
圖1-1 生成隱藏信息的圖片
從BMP圖像的結構中可知,圖像的3、4、5、6四個字節存放整個BMP圖像的長度。使用該方法隱藏信息時,未修改圖像文件的文件長度字節,通過比較文件的實際長度和文件中保存的文件長度,就可發現該圖像是否隱藏秘密信息。
當圖像隱藏信息后,如diff=11,表示隱藏11個字節的信息。因此要在圖像中隱藏信息,需修改圖像文件長度,也就是修改第3、4、5、6字節,如此例中需在圖像中隱藏11個字節信息,需要將文件長度增加11。在Ultraedit中手工將第3個字節由原來的0x36(十進制的54),變為0x41(十進制的65),然后再運行上述程序,發現diff=0,表示圖像隱藏并修改文件的長度后,通過該種方法無法發現圖像中是否隱藏信息,同時使用圖像查看工具打開圖像文件,發現圖像再視覺上和原圖沒有任何差別。
圖1-2 圖像隱藏11個字節信息
圖1-3 圖像修改前
圖1-4 圖像修改后
圖1-5 修改完后diff=0
????????
圖1-6 修改前后圖對比(右圖為隱藏信息后)
(2)文件頭與圖像數據之間隱藏信息
在數據區開始之前隱藏信息,也就是在54和55個字節之間隱藏信息,隱藏的秘密信息從hidden.txt文件中讀取,此種方法修改圖像數據的偏移量和圖像書的文件長度。
圖2-1 hidden.txt文件
圖2-2 隱藏hidden.txt文件的內容
圖2-3 隱藏信息前
圖2-4 隱藏信息后
????????
圖2-5 隱藏前后圖片對比(右圖為隱藏后)
(3)BMP圖像文件隱藏信息的檢測
在BMP圖像中隱藏信息的時候一般都是通過修改文件的偏移量和圖像文件中圖像的長度來隱藏信息,但在BMP圖像文件中,file_length=biwidthbiBytecountbiHeight+bfoffBits,其中biwidth,biheight表示圖像文件的寬度和高度,bfoffBits表示文件頭到實際位圖圖像數據之間的偏移量。
通過diff的不同來比較圖像是否在結尾處隱藏了信息,此種方法不能檢測對于修改偏移量的隱藏檢測。
圖3-1 檢測文件隱藏了信息
(4)在圖像文件頭和信息頭的保留字段中隱藏信息
BMP圖像文件中有很多從不使用的保留字節,如7、8、9、10字節是保留的,必須是0,可在第7、8、9、10字節隱藏秘密信息。
圖4-1 在保留字節隱藏信息
圖4-2 隱藏信息前
圖4-3 隱藏信息后
????????
圖4-4 保留字節隱藏信息對比圖(右圖為隱藏信息后)
(5)灰度、二值圖像或其他圖像信息隱藏及檢測
LSB全稱為 Least Significant Bit(最低有效位),是一種常被用做圖片隱寫的算法(在CTF中經常見到她的身影)。LSB屬于空域算法中的一種,是將信息嵌入到圖像點中像素位的最低位,以保證嵌入的信息是不可見的,但是由于使用了圖像不重要的像素位,算法的魯棒性差,水印信息很容易為濾波、圖像量化、幾何變形的操作破壞。
1) 信息嵌入部分
圖5-1 將圖片轉換為灰度圖
圖5-2 經過代碼將圖轉換為灰度圖,并產生文件xxx3.bmp文件
圖5-3 信息隱藏代碼
圖5-4 信息隱藏前后圖片的對比
2) 信息提取部分
圖5-5 信息提取代碼,其中紅框中內容為提出信息的文本
圖5-6 查看生成的hid.txt文件,其中內容為我們所隱藏的信息
5.實驗結論與建議
通過這個實驗,了解了BMP圖像文件格式,以及隱藏信息的原理,并可以通過在實際的圖像數據后隱藏信息、文件頭與圖像數據之間隱藏信息和在圖像文件頭和信息頭的保留字段中隱藏信息這三種方式對BMP圖像進行信息隱藏。
總結
以上是生活随笔為你收集整理的java bmp信息隐藏_BMP图像信息隐藏及检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中的case1怎么说_Java
- 下一篇: 创建商品类java_SSH框架网上商城项