首頁 > 農業

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

由 酷扯兒 發表于 農業2021-12-13

簡介[4]讓我們舉一個例子來說明這項技術的工作原理,假設我們想將訊息“ hi ”隱藏到具有以下畫素值的4x4影象中:[(225, 12, 99), (155, 2, 50), (99, 51, 15), (15, 55, 22),(155, 6

如何修改圖片上的數字

「來源: |AI演算法與影象處理 ID:AI_study」

點選下方“

AI演算法與影象處理

”,一起進步!

重磅乾貨,第一時間送達

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

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

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

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

什麼是隱寫術?

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

使用隱寫術優於加密術?

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

隱寫術的型別

隱寫術工作已在不同的傳輸媒體上進行,如影象、影片、文字或音訊。

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

基本隱寫模型

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

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

本文將幫助我們使用 Python 實現影象隱寫術,它將幫助我們編寫 Python 程式碼,使用一種稱為最低有效位的技術隱藏文字訊息。

最低有效位隱寫術

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

最低有效位 (LSB) 是一種技術,其中每個畫素的最後一位被修改並替換為秘密訊息的資料位。

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

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

從上圖可以清楚地看出,如果我們改變 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)。

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

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

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

第 2 步:定義一個將任意型別資料轉換為二進位制的函式,我們將在編碼和解碼階段使用該函式來將秘密資料和畫素值轉換為二進位制。

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

第 3 步:編寫一個函式,透過改變 LSB 將秘密資訊隱藏到影象中

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

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

第 4 步:定義一個函式,用於解碼隱藏影象中的隱藏訊息

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

第 5 步:該函式將輸入的影象名稱和秘密訊息作為使用者的輸入,並呼叫 hideData() 對訊息進行編碼

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

第6步:建立一個函式,讓使用者輸入需要解碼的圖片名稱,呼叫showData()函式返回解碼後的資訊

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

第 7 步:主函式()

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

結果:

對訊息進行編碼:

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

解碼訊息:

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

如果小夥伴們對程式碼感興趣,可以在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:何愷明頂會分享

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

Tags:隱寫術隱藏畫素訊息秘密