Python 网络安全 实现图片隐写秘密信息
·
Python 实现图片隐写
隐写术(Steganography)是一种将信息隐藏在其他文件中的技术,常用于将文本信息嵌入到图像文件中。以下是一个使用 Python 实现简单图片隐写的示例。
1. 安装所需库
我们将使用 Pillow 库来处理图像。可以使用以下命令安装:
pip install Pillow
2. 隐写示例代码
以下是一个简单的示例代码,展示如何将文本信息嵌入到图像中,并从图像中提取该信息。
2.1 隐写文本到图像
from PIL import Image
def encode_image(image_path, secret_message, output_path):
"""将秘密信息嵌入到图像中"""
# 打开图像
image = Image.open(image_path)
encoded_image = image.copy()
# 将秘密信息转换为二进制
binary_message = ''.join(format(ord(char), '08b') for char in secret_message) + '1111111111111110' # 结束标志
data_index = 0
width, height = encoded_image.size
for y in range(height):
for x in range(width):
pixel = list(encoded_image.getpixel((x, y)))
# 修改像素的最低有效位
for i in range(3): # 只修改 RGB 通道
if data_index < len(binary_message):
pixel[i] = pixel[i] & ~1 | int(binary_message[data_index]) # 修改最低有效位
data_index += 1
encoded_image.putpixel((x, y), tuple(pixel))
if data_index >= len(binary_message):
break
if data_index >= len(binary_message):
break
# 保存修改后的图像
encoded_image.save(output_path)
print("信息已嵌入图像。")
# 示例用法
if __name__ == "__main__":
encode_image("input_image.png", "Hello, World!", "output_image.png")
2.2 从图像中提取隐写信息
def decode_image(image_path):
"""从图像中提取秘密信息"""
image = Image.open(image_path)
binary_message = ""
width, height = image.size
for y in range(height):
for x in range(width):
pixel = list(image.getpixel((x, y)))
# 读取像素的最低有效位
for i in range(3): # 只读取 RGB 通道
binary_message += str(pixel[i] & 1)
# 将二进制转换为字符
message = ""
for i in range(0, len(binary_message), 8):
byte = binary_message[i:i + 8]
if byte == '11111111': # 结束标志
break
message += chr(int(byte, 2))
return message
# 示例用法
if __name__ == "__main__":
secret_message = decode_image("output_image.png")
print("提取的秘密信息:", secret_message)
3. 代码解析
-
隐写文本到图像:
- 使用
Pillow打开图像并创建其副本。 - 将秘密信息转换为二进制格式,并在末尾添加结束标志(
1111111111111110)。 - 遍历图像的每个像素,修改其 RGB 通道的最低有效位以嵌入二进制信息。
- 保存修改后的图像。
- 使用
-
从图像中提取隐写信息:
- 打开图像并读取每个像素的最低有效位,构建二进制字符串。
- 将二进制字符串转换为字符,直到遇到结束标志。
4. 运行程序
将上述代码复制到 Python 环境中运行。首先调用 encode_image 函数将秘密信息嵌入到图像中,然后调用 decode_image 函数从图像中提取该信息。
5. 注意事项
- 图像格式:确保使用支持 RGB 通道的图像格式(如 PNG 或 BMP),JPEG 格式可能会导致信息丢失。
- 信息大小:嵌入的信息大小应小于图像的像素数量(每个像素可以嵌入 3 位信息)。
- 安全性:隐写术并不提供加密,建议在隐写之前对信息进行加密以提高安全性。
更多推荐
所有评论(0)