成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用Python實現最低有效位隱寫術?

開發 后端
隱寫術是一門關于在適當的多媒體載體中傳輸秘密數據的科學,例如在圖像、音頻和視頻文件中。它的假設是,如果特征是可見的,那么攻擊點就是明顯的,因此這里的目標總是隱藏嵌入數據的存在。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)

 隱寫術是一門關于在適當的多媒體載體中傳輸秘密數據的科學,例如在圖像、音頻和視頻文件中。它的假設是,如果特征是可見的,那么攻擊點就是明顯的,因此這里的目標總是隱藏嵌入數據的存在。

[[343509]]

 

LSB圖像隱寫術

LSB隱寫術是一種圖像隱寫術技術,通過用要隱藏的信息位替換每個像素的最低有效位,將信息隱藏在圖像中。為了更好地理解,將數字圖像視為2D像素陣列,每個像素包含的值取決于其類型和深度。

我們將考慮最廣泛使用的模式——RGB(3×8位像素,真彩)和RGBA(4x8位像素,帶透明遮罩的真彩),這些值的范圍從0到255(8位值)。

 

將圖像表示為2D陣列的RGB像素

通過使用ASCII表,可以將消息轉換為十進制值,然后轉換為二進制值,接著逐個迭代像素值,在將像素值轉換為二進制后,將每個最低有效位替換為序列中的該消息位。

要解碼一個已編碼的圖像,只需顛倒這個過程:收集并存儲每個像素的最后一位,將它們分成8個一組,并將其轉換回ASCII字符,以得到隱藏的信息。

 

PYTHON操作

試著使用Python庫PIL和NumPY來逐步實現上述概念。

  • 步驟1:導入所有必需的python庫

 

  1. import numpy as np 
  2. from PIL import Image 
  • 步驟2:啟用編碼器功能

首先,編寫代碼,將源圖像轉換成一個NumPy像素陣列,并存儲圖像的大小。檢查圖像的模式是RGB還是RGBA,然后設置n的值。還需計算像素的總數。

 

  1. def Encode(src, message, dest): 
  2.     img = Image.open(src, 'r'
  3.     width, height = img.size    array = np.array(list(img.getdata())) 
  4.     if img.mode == 'RGB'
  5.         n = 3 
  6.         m = 0 
  7.     elif img.mode == 'RGBA'
  8.         n = 4 
  9.         m = 1 
  10.     total_pixels = array.size//n 

其次,在秘密消息的末尾添加一個分隔符(“$T3G0”),這樣程序在解碼時就知道什么時候該停止,將這個更新后的消息轉換成二進制形式,并計算出所需的像素。

 

  1. message += "$t3g0" 
  2. b_message = ''.join([format(ord(i), "08b"for i in message]) 
  3. req_pixels = len(b_message) 

接著,檢查可用的總像素是否足夠用于秘密消息。如果繼續逐個迭代像素,并將它們的最低有效位修改為秘密消息的位,直到包括分隔符的完整消息已經被隱藏。

 

  1. if req_pixels > total_pixels: 
  2.     print("ERROR: Need larger filesize")else:    index=0    for p in range(total_pixels): 
  3.         for q in range(m, n): 
  4.             if index < req_pixels: 
  5.                 array[p][q] =int(bin(array[p][q])[2:9] + b_message[index], 2) 
  6.                 index += 1 

最后,有了更新后的像素數組,可以使用它來創建并保存為目標輸出圖像。

 

  1. array=array.reshape(height, width, n) 
  2. enc_img = Image.fromarray(array.astype('uint8'), img.mode) 
  3. enc_img.save(dest)print("Image Encoded Successfully"

這樣,編碼器功能就完成了,是這樣的:

 

  1. def Encode(src, message, dest): 
  2.     img = Image.open(src, 'r')    width, height = img.size    array = np.array(list(img.getdata()))    if img.mode == 'RGB':        n = 3        m = 0    elif img.mode == 'RGBA':        n = 4        m = 1    total_pixels = array.size//n 
  3.     message += "$t3g0" 
  4.     b_message = ''.join([format(ord(i),"08b"for i in message]) 
  5.     req_pixels = len(b_message) 
  6.     if req_pixels > total_pixels: 
  7.         print("ERROR: Need largerfile size")    else:        index=0        for p in range(total_pixels): 
  8.             for q in range(m, n): 
  9.                 if index < req_pixels: 
  10.                     array[p][q] =int(bin(array[p][q])[2:9] + b_message[index], 2) 
  11.                     index += 1 
  12.         array=array.reshape(height,width, n) 
  13.         enc_img =Image.fromarray(array.astype('uint8'), img.mode) 
  14.         enc_img.save(dest)        print("Image EncodedSuccessfully"
  • 步驟3:啟用解碼器功能

首先,重復類似的步驟,將源圖像的像素保存為一個數組,計算模式,并計算總像素。

 

  1. def Decode(src): 
  2.     img = Image.open(src, 'r'
  3.     array = np.array(list(img.getdata())) 
  4.     if img.mode == 'RGB'
  5.         n = 3 
  6.         m = 0 
  7.     elif img.mode == 'RGBA'
  8.         n = 4 
  9.         m = 1 
  10.     total_pixels = array.size//n 

其次,需要從圖像左上角開始的每個像素中提取最低有效位,并以8個為一組存儲。接下來,將這些組轉換成ASCII字符來查找隱藏的消息,直到完全讀取之前插入的分隔符。

 

  1. hidden_bits = "" 
  2. for p in range(total_pixels): 
  3.     for q in range(m, n): 
  4.         hidden_bits +=(bin(array[p][q])[2:][-1]) 
  5. hidden_bits = [hidden_bits[i:i+8] for i in range(0, len(hidden_bits), 8)] 
  6. message = "" 
  7. for i in range(len(hidden_bits)): 
  8.     if message[-5:] == "$t3g0"
  9.         break 
  10.     else
  11.         message +=chr(int(hidden_bits[i], 2)) 

最后,檢查是否找到了分隔符。如果沒有,意味著圖像中沒有隱藏的信息。

 

  1. if "$t3g0" in message: 
  2.     print("Hidden Message:",message[:-5]) 
  3. else
  4.     print("No Hidden MessageFound"

這樣,我們的解碼器功能就完成了,看起來應該是這樣的:

 

  1. def Decode(src): 
  2.     img = Image.open(src, 'r')    array = np.array(list(img.getdata()))    if img.mode == 'RGB':        n = 3        m = 0    elif img.mode == 'RGBA':        n = 4        m = 1    total_pixels = array.size//n 
  3.     hidden_bits = "" 
  4.     for p in range(total_pixels): 
  5.         for q in range(m, n): 
  6.             hidden_bits +=(bin(array[p][q])[2:][-1]) 
  7.     hidden_bits = [hidden_bits[i:i+8] fori in range(0, len(hidden_bits), 8)] 
  8.     message = "" 
  9.     for i in range(len(hidden_bits)): 
  10.         if message[-5:] =="$t3g0":            break        else:            message +=chr(int(hidden_bits[i], 2))    if "$t3g0" in message:        print("Hidden Message:",message[:-5])    else:        print("No Hidden MessageFound"
  • 步驟4:制作主要功能

對于主要功能,我們需詢問用戶想要執行哪個功能——編碼還是解碼。

若是編碼,則要求用戶輸入以下內容——帶擴展名的源圖像名稱、秘密消息和帶擴展名的目標圖像名稱。若是解碼,則要求用戶提供隱藏了消息的源圖像。

 

  1. def Stego(): 
  2.     print("--Welcome to$t3g0--"
  3.     print("1: Encode"
  4.     print("2: Decode"
  5.     func = input() 
  6.     if func == '1'
  7.         print("Enter Source ImagePath"
  8.         src = input() 
  9.         print("Enter Message toHide"
  10.         message = input() 
  11.         print("Enter Destination ImagePath"
  12.         dest = input() 
  13.         print("Encoding..."
  14.         Encode(src, message, dest)    elif func == '2'
  15.         print("Enter Source ImagePath"
  16.         src = input() 
  17.         print("Decoding..."
  18.         Decode(src)    else
  19.         print("ERROR: Invalid optionchosen"
  • 步驟5:把以上所有功能放在一起,我們的LSB圖像隱寫程序就準備好了。

請注意,在一項研究中,觀察到傳統的LSB在JPEG的情況下是無效的,因為數據會因為其有損性質而在壓縮時被操縱。而對于PNG圖像,簡單的LSB是適用的,在壓縮時不會有任何數據損失。因此,最好只在PNG圖像上運行你的程序。

 

舉例

 

1.編碼信息

 

 

2.解碼信息

 

 

 

 

 

責任編輯:華軒 來源: 讀芯術
相關推薦

2018-05-18 14:40:34

2019-04-08 10:26:20

2021-01-27 21:53:50

版權保護隱寫

2021-02-04 20:57:19

顯隱術版權字符

2024-04-16 11:49:08

2024-04-25 14:52:34

2019-07-01 13:06:45

隱寫術網絡安全威脅

2017-04-03 21:52:30

隔離線程池分布式

2020-10-28 10:46:52

Purple Fox攻

2018-08-10 09:52:00

2024-09-12 09:15:43

2009-12-30 16:45:31

ADO操作

2023-11-20 18:28:37

2009-12-10 16:14:53

屏蔽PHP錯誤提示

2019-11-29 20:31:08

SphinxPython編程語言

2021-05-28 17:59:37

K8sDNS解析CoreDNS

2024-05-31 13:18:44

2021-05-25 11:40:27

網絡安全隱寫互聯網

2021-03-29 09:00:00

Kubernetes容器工具

2015-02-28 09:35:01

iOSpython
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线欧美亚洲 | 日韩一区二区三区在线观看 | 一区二区三区小视频 | 国产激情一区二区三区 | 日韩精品在线看 | 一区二区不卡高清 | 亚洲精品1区 | 欧美日韩福利视频 | 黄色精品视频网站 | 日韩在线视频播放 | 午夜激情视频在线 | 欧美成人手机在线 | 久久精品免费观看 | 天天爱天天操 | 国产一区二区激情视频 | 亚洲va欧美va天堂v国产综合 | 国产一区二区精品自拍 | 国产一区二区三区在线视频 | 操视频网站 | 一区二区三区欧美 | 视频在线一区二区 | 日本黄色影片在线观看 | 久久国产精品一区二区 | 日韩视频免费在线 | 亚洲一区二区三区四区五区午夜 | 成av在线| 日韩高清一区 | 精品国产一区二区三区久久久蜜月 | 久久精品国产精品青草 | 久久亚洲欧美日韩精品专区 | 久久久国产一区二区三区四区小说 | 亚洲精品福利视频 | 国产高清视频 | av色站| 国产成人在线一区二区 | 欧美一级特黄aaa大片在线观看 | 日韩第一区 | 亚洲精品91 | 天天射美女 | 成人精品鲁一区一区二区 | 免费骚视频 |