python LSB隐写术 pillow
时间: 2023-10-12 14:17:34 浏览: 132
LSB隐写术是一种将信息隐藏在图像中的方法,其中信息位被嵌入到图像像素的最低有效位中,以避免对图像质量的显著影响。Pillow是Python的一个图像处理库,可用于在Python中实现LSB隐写术。
下面是一个使用Pillow库实现LSB隐写术的示例代码:
```python
from PIL import Image
# 将文本信息转换为二进制字符串
def text_to_bits(text):
bits = bin(int.from_bytes(text.encode('utf-8'), 'big'))[2:]
return bits.zfill(8 * ((len(bits) + 7) // 8))
# 将二进制字符串转换为文本信息
def bits_to_text(bits):
n = int(bits, 2)
return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode('utf-8', errors='replace')
# 将信息嵌入到图像中
def embed_message(image_path, message):
image = Image.open(image_path)
pixel_list = list(image.getdata())
message_bits = text_to_bits(message)
if len(message_bits) > len(pixel_list):
raise ValueError('Message too long to embed in image')
for i in range(len(message_bits)):
pixel = pixel_list[i]
new_pixel = tuple((pixel[j] & 254) | int(message_bits[i][j]) for j in range(3))
pixel_list[i] = new_pixel
stego_image = Image.new(image.mode, image.size)
stego_image.putdata(pixel_list)
return stego_image
# 从图像中提取信息
def extract_message(image_path):
image = Image.open(image_path)
pixel_list = list(image.getdata())
message_bits = ''
for pixel in pixel_list:
message_bits += bin(pixel[0] & 1)[2:]
message_bits += bin(pixel[1] & 1)[2:]
message_bits += bin(pixel[2] & 1)[2:]
message = bits_to_text(message_bits)
return message
```
使用示例:
```python
# 将信息嵌入到图像中
stego_image = embed_message('original_image.png', 'This is a secret message')
stego_image.save('stego_image.png')
# 从图像中提取信息
message = extract_message('stego_image.png')
print(message)
```
需要注意的是,使用LSB隐写术嵌入信息会对图像造成一定程度的失真,因此需要根据实际需求选择合适的图像和信息长度。
阅读全文