2016年12月24日 星期六

[實作]Hiding data in images by simple LSB substitution

這篇是簡易版的,直接照老師上課講的方法實作,和論文實作應該有很大的出入
論文實作篇在這邊:https://iris123321.blogspot.com/2017/05/finding-optimal-least-significant-bit.html



Data hiding in image是指將secret image藏於cover image底下,就是將秘密藏於一張圖片底下,最貼近生活的例子如恐怖組織在傳遞訊息時,把機密藏在一張普通的照片底下,這樣就算被攔截也不會被發現,這時候,許多人就開始在想,那可以將一張圖片藏於一張圖片底下嗎?其實如果允許圖片失真的情況下,真的可以。

在電腦中,每一個像素(pixel)都是由RGB(red,green,blue)所組成,各占8bits,讓我們來看看如果拋棄幾個8bit中的後面幾個bit會發生什麼事




上面那張圖就可以發現,如果將R後四個bit給刪除,其實沒仔細看是看不太出來的,而刪除後面比較不重要的bit的方法稱為simple LSB (Least Significant Bit,最低有效位元),利用人眼對於色彩的敏感度:Green>Red>Blue,來實作data hiding,做法如下圖






要將Secret image藏於cover image中,得到stego image:



  • secret_R的前4個bits取代cover_R後4個bits得到stego_R,
  • secret_G的前5個bits取代cover_G後5個bits得到stego_G,
  • secret_R的前3個bits取代cover_B後3個bits得到stego_B,



解碼的部分就是將stego_R取後4 bits,再用0把8 bits填滿即可


來看一下demo的結果

測試圖片原圖來自google search


左上(cover image)、右上(secret image)、左下(stego image)、右下(decode image)

失真率還是蠻明顯的,但以data hiding來說已經算是成功了,接下來就是程式碼的部分,首先先準備兩張512x512 pixels的RAW檔圖:cover.raw 和 secret.raw作為測資,讀入後會輸出stego.raw



解碼程式:

input:stego.raw
output:decode2.raw



最後,祝大家有個美好的聖誕節~ 😄😄😄

3 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 作者您好,不好意思我是剛接觸的初學者,有些問題想請教您~
    請問一定要用RAW的圖檔嗎?
    我將您的程式執行後結合的stego.raw開不起來QQ
    謝謝您

    回覆刪除
    回覆
    1. hi andrea,
      raw 是未經壓縮的圖檔,所以可以直接對pixel 做動作,不需要先解壓縮
      但能支援這個圖檔的軟體很少,例如photoshop

      如果其他格式圖檔ex JPG PNG,可以使用openCV或matlab來實作,有現成函數能做格式預處理

      刪除

注意:只有此網誌的成員可以留言。