真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)

這篇文章主要講解了“怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)”吧!

十年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站制作,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁(yè)制作,對(duì)成都木制涼亭等多個(gè)行業(yè),擁有豐富的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)。

LSB圖像隱寫術(shù)

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

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

怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)

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

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

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

PYTHON操作

試著使用Python庫(kù)PIL和NumPY來(lái)逐步實(shí)現(xiàn)上述概念。

  • 步驟1:導(dǎo)入所有必需的python庫(kù)

import numpy as np from PIL import Image
  • 步驟2:?jiǎn)⒂镁幋a器功能

首先,編寫代碼,將源圖像轉(zhuǎn)換成一個(gè)NumPy像素陣列,并存儲(chǔ)圖像的大小。檢查圖像的模式是RGB還是RGBA,然后設(shè)置n的值。還需計(jì)算像素的總數(shù)。

def Encode(src, message, dest):     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

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

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

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

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

最后,有了更新后的像素?cái)?shù)組,可以使用它來(lái)創(chuàng)建并保存為目標(biāo)輸出圖像。

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

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

def Encode(src, message, dest):     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     message += "$t3g0"     b_message = ''.join([format(ord(i),"08b") for i in message])     req_pixels = len(b_message)     if req_pixels > total_pixels:         print("ERROR: Need largerfile size")    else:        index=0        for p in range(total_pixels):             for q in range(m, n):                 if index < req_pixels:                     array[p][q] =int(bin(array[p][q])[2:9] + b_message[index], 2)                     index += 1         array=array.reshape(height,width, n)         enc_img =Image.fromarray(array.astype('uint8'), img.mode)         enc_img.save(dest)        print("Image EncodedSuccessfully")
  • 步驟3:?jiǎn)⒂媒獯a器功能

首先,重復(fù)類似的步驟,將源圖像的像素保存為一個(gè)數(shù)組,計(jì)算模式,并計(jì)算總像素。

def Decode(src):     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

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

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

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

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

這樣,我們的解碼器功能就完成了,看起來(lái)應(yīng)該是這樣的:

def Decode(src):     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     hidden_bits = ""     for p in range(total_pixels):         for q in range(m, n):             hidden_bits +=(bin(array[p][q])[2:][-1])     hidden_bits = [hidden_bits[i:i+8] fori in range(0, len(hidden_bits), 8)]     message = ""     for i in range(len(hidden_bits)):         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:制作主要功能

對(duì)于主要功能,我們需詢問(wèn)用戶想要執(zhí)行哪個(gè)功能——編碼還是解碼。

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

def Stego():     print("--Welcome to$t3g0--")     print("1: Encode")     print("2: Decode")     func = input()     if func == '1':         print("Enter Source ImagePath")         src = input()         print("Enter Message toHide")         message = input()         print("Enter Destination ImagePath")         dest = input()         print("Encoding...")         Encode(src, message, dest)    elif func == '2':         print("Enter Source ImagePath")         src = input()         print("Decoding...")         Decode(src)    else:         print("ERROR: Invalid optionchosen")
  • 步驟5:把以上所有功能放在一起,我們的LSB圖像隱寫程序就準(zhǔn)備好了。

請(qǐng)注意,在一項(xiàng)研究中,觀察到傳統(tǒng)的LSB在JPEG的情況下是無(wú)效的,因?yàn)閿?shù)據(jù)會(huì)因?yàn)槠溆袚p性質(zhì)而在壓縮時(shí)被操縱。而對(duì)于PNG圖像,簡(jiǎn)單的LSB是適用的,在壓縮時(shí)不會(huì)有任何數(shù)據(jù)損失。因此,最好只在PNG圖像上運(yùn)行你的程序。

舉例

怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)

1.編碼信息

怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)

2.解碼信息

怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)

感謝各位的閱讀,以上就是“怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


分享題目:怎么使用Python實(shí)現(xiàn)最低有效位隱寫術(shù)
地址分享:http://weahome.cn/article/gjosch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部