Python3 圖片隱寫術
先看看下面兩張圖,有什么差別。
看不出來吧?其實右圖中隱藏了一段文字,只是通過一般手段無法察覺,需要編碼才能破解,這就用到了一種黑科技——隱寫術。
隱寫術是一門關于信息隱藏的技巧與科學,所謂信息隱藏指的是不讓除預期的接收者之外的任何人知曉信息的傳遞事件或者信息的內容。
這是維基百科中對隱寫術的簡介。
隱寫技術是信息隱藏技術中很重要的一種技術,它以圖像、文本、音頻、視頻等數字媒體作為載體,將秘密信息嵌入到原始載體,并以不引起第三方注意的方式在公共信道上傳輸。如果說加密技術是保護消息的內容,那么數字隱寫技術就是隱藏消息的存在。
作為不可信網絡環境中的一種新型保密通信手段,隱寫術在學術界和國防安全領域受到了普遍關注。
通過這個教程帶你走入隱寫術的大門。
教程是由FrostSigh發布在 實驗樓 ,完整教程及在線練習地址: Python3 圖片隱寫術
項目名稱:
Python3圖片隱寫術
項目簡介:
通過Python3實現將關鍵信息隱藏在圖片的效果,主要目的是為了不讓預期接收者以外的人知曉傳遞的內容。與電視劇中使用特殊墨水傳遞信息一樣,表面看就是一張什么都沒寫的白紙,實則暗藏著重要信息。
項目效果圖:
可以看到“施法”前后的圖片肉眼看不出區別,然而圖片卻真實的隱藏了一些數據在里面。
隱藏的文字
涉及知識點:
-
Pillow 模塊
-
最低有效位
-
lambda 表達式遞歸
-
UTF-8 編碼
實驗原理:
還是引用 wikipedia 的解釋:
載體文件(cover file)相對隱秘文件的大小(指數據含量,以比特計)越大,隱藏后者就越加容易。
因為這個原因,數字圖像(包含有大量的數據)在因特網和其他傳媒上被廣泛用于隱藏消息。這種方法使用的廣泛程度無從查考。例如:一個24位的位圖中的每個像素的三個顏色分量(紅,綠和藍)各使用8個比特來表示。如果我們只考慮藍色的話,就是說有2^8種不同的數值來表示深淺不同的藍色。而像11111111和11111110這兩個值所表示的藍色,人眼幾乎無法區分。因此,這個最低有效位就可以用來存儲顏色之外的信息,而且在某種程度上幾乎是檢測不到的。如果對紅色和綠色進行同樣的操作,就可以在差不多三個像素中存儲一個字節的信息。
更正式一點地說,使隱寫的信息難以探測的,也就是保證“有效載荷”(需要被隱蔽的信號)對“載體”(即原始的信號)的調制對載體的影響看起來(理想狀況下甚至在統計上)可以忽略。這就是說,這種改變應該無法與載體中的噪聲加以區別。
(從信息論的觀點來看,這就是說信道的容量必須大于傳輸“表面上”的信號的需求。這就叫做信道的冗余。對于一幅數字圖像,這種冗余可能是成像單元的噪聲;對于數字音頻,可能是錄音或者放大設備所產生的噪聲。任何有著模擬放大級的系統都會有所謂的熱噪聲(或稱“1/f”噪聲),這可以用作掩飾。另外,有損壓縮技術(如JPEG)會在解壓后的數據中引入一些誤差,利用這些誤差作隱寫術用途也是可能的。)
隱寫術也可以用作數字水印,這里一條消息(往往只是一個標識符)被隱藏到一幅圖像中,使得其來源能夠被跟蹤或校驗。
總而言之,這個教程便是利用圖片四個顏色分量(rgba)的最低有效位(英語:Least Significant Bit,lsb)來隱藏信息(本實驗隱藏的是文字)
實現步驟
這個項目教程,通過4個步驟來教你完全了解圖片的隱寫術原理:
-
安裝開發所需要的包: 實驗中會用到 Pillow ,所以需要安裝 Pillow 依賴包;
-
編碼: 將隱藏信息編碼到圖片中;
-
解碼: 將接收到的圖片進行解碼,識別所隱藏的信息;
-
測試: 項目的最后,當時是需要進行測試咯,看看是否可以準確的識別出圖片所隱藏的信息;
關于項目的項目開發文檔、代碼、步驟等, 點擊這里 即可進行查看啦。
來自:http://www.jianshu.com/p/ac2c1d384be4