【发布时间】:2017-11-05 21:05:02
【问题描述】:
我正在编写一个 Python 脚本来隐藏图像中的数据。它基本上隐藏了.PNG中每个像素的RGB映射中红色的最后两位中的位。该脚本适用于小写字母,但会产生带有句号的错误。它会产生这个错误:
Traceback(最近一次调用最后一次):文件 “E:\Python\Steganography\main.py”,第 65 行,在 print(unhide('coded-img.png')) 文件“E:\Python\Steganography\main.py”,第 60 行,取消隐藏 message = bin2str(binary) 文件“E:\Python\Steganography\main.py”,第 16 行,在 bin2str 中 return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode() UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 6:无效的起始字节
这是我的代码:
from PIL import Image
def str2bin(message):
binary = bin(int.from_bytes(message.encode('utf-8'), 'big'))
return binary[2:]
def bin2str(binary):
n = int(binary, 2)
return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
def hide(filename, message):
image = Image.open(filename)
binary = str2bin(message) + '00000000'
data = list(image.getdata())
newData = []
index = 0
for pixel in data:
if index < len(binary):
pixel = list(pixel)
pixel[0] >>= 2
pixel[0] <<= 2
pixel[0] += int('0b' + binary[index:index+2], 2)
pixel = tuple(pixel)
index += 2
newData.append(pixel)
print(binary)
image.putdata(newData)
image.save('coded-'+filename, 'PNG')
def unhide(filename):
image = Image.open(filename)
data = image.getdata()
binary = '0'
index = 0
while binary[-8:] != '00000000':
binary += bin(data[index][0])[-2:]
index += 1
binary = binary[:-1]
print(binary)
print(index*2)
message = bin2str(binary)
return message
hide('img.png', 'alpha.')
print(unhide('coded-img.png'))
请帮忙。谢谢!
【问题讨论】:
标签: python python-3.x steganography