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 位信息)。
  • 安全性:隐写术并不提供加密,建议在隐写之前对信息进行加密以提高安全性。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐