將文字偷偷藏在圖片的算法!Python 實現

點擊下方AI算法與圖像處理”,一起進步!

重磅乾貨,第一時間送達

今天,世界正在見證前所未有的數據爆炸,我們每天產生的數據量確實令人難以置信。福布斯的文章“我們每天創造多少數據?” 指出,以我們目前的速度每天創建大約2.5 千億字節的數據,但隨着物聯網 (IoT) 的發展,這一速度只會加快。僅在過去兩年中,世界上 90% 的數據都是生成的,這篇值得重讀!


現代計算世界圍繞着數據這個詞,但到底是什麼讓人如此感興趣呢?在當今世界,企業已經開始意識到數據就是力量,因爲它可以預測客戶趨勢、增加銷售額,並將公司推向新的高度。隨着技術的快速進步和數據不斷創新,數據安全已成爲我們的首要任務。隨着每天數以千計的消息和數據在互聯網上從一個地方傳輸到另一個地方,數據共享正在增加,數據的保護是發送者的主要關注點,我們必須以只有接收者才能理解的祕密方式對消息進行加密,這一點非常重要。


在本文中,我們將瞭解什麼是最低有效位隱寫術,以及我們如何使用 python 實現它。


什麼是隱寫術?

隱寫術是將祕密信息隱藏在更大的信息中的過程,使人無法知道隱藏信息的存在或內容。隱寫術的目的是保持雙方之間的祕密通信,與隱藏祕密消息內容的密碼學不同,隱寫術隱藏了消息傳遞這一事實。雖然隱寫術不同於密碼術,但兩者之間有很多類比,一些作者將隱寫術歸類爲密碼術的一種形式,因爲隱藏通信是一種祕密通信。


使用隱寫術優於加密術?

到目前爲止,密碼學一直在保護髮送者和預期接收者之間的機密性方面發揮着最終作用。然而,如今除了密碼學之外,隱寫術被越來越多地用於爲隱藏數據添加更多保護層。與單獨使用密碼學相比,使用隱寫術的優勢在於,預期的祕密消息本身不會引起人們的注意,不會成爲審查的對象。顯而易見的加密消息,無論它們多麼牢不可破,都會引起人們的興趣,並且在加密是非法的國家,這些信息本身可能會被指控有罪。[1]


隱寫術的類型

隱寫術工作已在不同的傳輸媒體上進行,如圖像、視頻、文本或音頻。


基本隱寫模型

如上圖所示,需要隱藏的原始圖像文件 (X) 和祕密消息 (M) 都作爲輸入輸入到隱寫編碼器中,隱寫編碼器函數 f(X,M,K) 通過使用最低有效位編碼等技術將祕密消息嵌入到封面圖像文件中,生成的隱藏圖像看起來與封面圖像文件非常相似,沒有明顯的變化,這樣就完成了編碼。爲了檢索祕密消息,隱寫對象被輸入到隱寫解碼器中。[3]


本文將幫助我們使用 Python 實現圖像隱寫術,它將幫助我們編寫 Python 代碼,使用一種稱爲最低有效位的技術隱藏文本消息。


最低有效位隱寫術

我們可以將數字圖像描述爲一組有限的數字值,稱爲像素。像素是圖像中最小的單個元素,其值表示給定顏色在任何特定點的亮度。因此,我們可以將圖像視爲包含固定行數和列數的像素矩陣(或二維數組)。


最低有效位 (LSB) 是一種技術,其中每個像素的最後一位被修改並替換爲祕密消息的數據位。


從上圖可以清楚地看出,如果我們改變 MSB 會對最終值產生更大的影響,但如果我們改變 LSB 對最終值的影響很小,因此我們使用最低有效位隱寫術。


LSB 技術是如何工作的?

每個像素包含紅、綠、藍三個值,這些值的範圍是 0 到 255,換句話說,它們是 8 位值。[4] 


讓我們舉一個例子來說明這項技術的工作原理,假設我們想將消息“ hi ”隱藏到具有以下像素值的4x4圖像中:


[(225, 12, 99), (155, 2, 50), (99, 51, 15), (15, 55, 22),(155, 61, 87), (63, 30, 17), (1, 55, 19), (99, 81, 66),(219, 77, 91), (69, 39, 50), (18, 200, 33), (25, 54, 190)]


使用ASCII 表,我們可以將祕密消息轉換爲十進制值,然後轉換爲二進制值:0110100 0110101。現在,我們逐個迭代像素值,在將其轉換爲二進制後,我們將每個最低有效位依次替換爲該消息位(例如 225 是 11100001,我們用第一個數據位(0)等替換最後一位,右邊的位(1),依此類推)。這隻會將像素值修改爲 +1 或 -1,這根本不明顯。執行LSBS後得到的像素值如下圖:


[(224, 13, 99),(154, 3, 50),(98, 50, 15),(15, 54, 23),(154, 61, 87),(63, 30, 17),( 1, 55, 19),(99, 81, 66),(219, 77, 91),(69, 39, 50),(18, 200, 33),(25, 54, 190)]


使用 Python 在圖像中隱藏文本

在本節中,我們可以找到使用 Python 代碼一步一步地隱藏和顯示過程,打開一個google collab筆記本並按照以下步驟操作:


在開始編寫代碼之前,我們可以使用左側菜單欄中顯示的上傳選項上傳我們想用於隱寫術的圖像(png)。

第 1 步:導入所有必需的 Python 庫

第 2 步:定義一個將任意類型數據轉換爲二進制的函數,我們將在編碼和解碼階段使用該函數來將祕密數據和像素值轉換爲二進制。

第 3 步:編寫一個函數,通過改變 LSB 將祕密信息隱藏到圖像中

第 4 步:定義一個函數,用於解碼隱藏圖像中的隱藏消息

第 5 步:該函數將輸入的圖像名稱和祕密消息作爲用戶的輸入,並調用 hideData() 對消息進行編碼

第6步:創建一個函數,讓用戶輸入需要解碼的圖片名稱,調用showData()函數返回解碼後的信息

第 7 步:主函數()


結果:


對消息進行編碼:

解碼消息:

如果小夥伴們對代碼感興趣,可以在Github上找到我的筆記本。


參考:

[1].https://towardsdatascience.com/steganography-hiding-an-image-inside-another-77ca66b2acb1

[2].https://www.edureka.co/blog/steganography-tutorial

[3].https://www.forbes.com/sites/bernardmarr/2018/05/21/how-much-data-do-we-create-every-day-the-mind-blowing-stats-everyone-should-read/#191d0b0160ba

[4].https://www.ukessays.com/essays/computer-science/steganography-uses-methods-tools-3250.php

[5].https://www.thepythoncode.com/article/hide-secret-data-in-images-using-steganography-python

[6].https://www.youtube.com/watch?v=xepNoHgNj0w&t=1922s



Github代碼連接:
https://github.com/rroy1212/Image_Steganography/blob/master/ImageSteganography.ipynb

努力分享優質的計算機視覺相關內容,歡迎關注:

交流羣


歡迎加入公衆號讀者羣一起和同行交流,目前有美顏、三維視覺計算攝影、檢測、分割、識別、醫學影像、GAN算法競賽等微信羣


     
        
        
        
個人微信(如果沒有備註不拉羣!
請註明: 地區+學校/企業+研究方向+暱稱



下載1:何愷明頂會分享


AI算法與圖像處理」公衆號後臺回覆:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經典工作的總結分析


下載2:終身受益的編程指南:Google編程風格指南


AI算法與圖像處理」公衆號後臺回覆:c++,即可下載。歷經十年考驗,最權威的編程規範!



   
      
      
      
下載3 CVPR2021

AI算法與圖像處公衆號後臺回覆: CVPR 即可下載1467篇CVPR 2020論文 和 CVPR 2021 最新論文


本文分享自微信公衆號 - AI算法與圖像處理(AI_study)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章