当前位置:首页>python>隐写术实战:如何用Python在图片中藏秘密信息?(附工具包)

隐写术实战:如何用Python在图片中藏秘密信息?(附工具包)

  • 2026-09-16 21:28:02
隐写术实战:如何用Python在图片中藏秘密信息?(附工具包)

🔍 隐写术实战:如何用Python在图片中藏秘密信息?(附工具包)

引言

"这张普通的猫咪图片里,其实藏着一份绝密文件!"
你是否在电影中见过这样的场景?黑客轻敲键盘,就能把信息隐藏在看似普通的图片中。这并非科幻,而是**隐写术(Steganography)**的经典应用。今天,我将带你用Python实现这个"魔术",让你也能在朋友圈玩转信息安全小把戏!

点击上方蓝字关注「白帽工具箱」,回复「隐写」获取文末福利工具包 ⬆️

一、隐写术原理:看不见的信息如何藏身?

1.1 什么是隐写术?

隐写术(Steganography)源于希腊语,意为"隐蔽的书写"。与加密技术不同,它不改变信息内容,而是隐藏信息的存在。常见载体包括:

  • 图片(修改像素LSB)
  • 音频(修改频谱)
  • 视频(帧间隐藏)
  • 文本(空格/标点微调)

1.2 LSB隐写原理

今天我们重点讲解最基础的LSB(Least Significant Bit)隐写技术:

  • 每个像素的RGB值由8位二进制表示
  • 修改最后1-2位(人类视觉几乎无法察觉)
  • 例如:把像素值255(11111111)改为254(11111110)

[图片无法加载: 图1 LSB隐写原理示意图]
图1:修改最低有效位对图像影响微乎其微

二、Python实战:3步实现图片隐写

2.1 准备工具

# 所需库(Python 3.6+)
pip install pillow numpy

2.2 加密代码实现

from PIL import Image
import numpy as np

def hide_message(img_path, message, output_path):
    img = Image.open(img_path)
    pixels = np.array(img)
    
    # 将消息转为二进制
    binary_msg = ''.join(format(ord(c), '08b') for c in message)
    binary_msg += '11111111'  # 结束标记
    
    # 修改LSB
    msg_index = 0
    for row in pixels:
        for pixel in row:
            for i in range(3):  # 修改R/G/B三个通道
                if msg_index < len(binary_msg):
                    pixel[i] = pixel[i] & 0xFE | int(binary_msg[msg_index])
                    msg_index += 1
    
    Image.fromarray(pixels).save(output_path)
    print(f"信息已隐藏在 {output_path}")

2.3 解密代码实现

def extract_message(img_path):
    img = Image.open(img_path)
    pixels = np.array(img)
    
    binary_msg = []
    for row in pixels:
        for pixel in row:
            for i in range(3):
                binary_msg.append(str(pixel[i] & 1))
    
    # 提取消息直到遇到结束标记
    message = []
    for i in range(0, len(binary_msg), 8):
        byte = ''.join(binary_msg[i:i+8])
        if byte == '11111111':
            break
        message.append(chr(int(byte, 2)))
    
    return ''.join(message)

三、高阶技巧与避坑指南

3.1 容量计算技巧

  • 每像素可藏3bit(RGB各1bit)
  • 800x600图片最大可藏:800×600×3÷8≈180KB文本
  • ⚠️ 实际建议不超过容量的50%(避免图像异常)

3.2 增强隐蔽性

# 加密前先压缩消息(需zlib库)
import zlib
message = zlib.compress(message.encode()).hex()

3.3 常见报错解决

  • ValueError:无法修改只读数组 → 添加pixels.setflags(write=True)
  • 提取乱码 → 检查加密/解密使用的通道顺序是否一致

四、总结回顾

  1. 隐写本质:利用人类感知冗余隐藏信息
  2. 关键技术:LSB修改 + 结束标记识别
  3. 实践要点:
    • 控制隐藏信息量(<50%容量)
    • 优先压缩文本数据
    • 测试不同载体格式(PNG效果优于JPG)

五、互动与福利

💬 互动话题:如果你要隐藏一段话,会选择藏在哪种类型的图片里?为什么?在评论区分享你的创意!

🎁 粉丝福利:
关注公众号回复「隐写」获取:

  • 完整可执行Python脚本
  • 专用检测工具StegDetect
  • 隐写术学习路线图

🔒 法律声明:本技术仅限学习交流,请勿用于非法用途。实验建议使用自拍照片作为载体。

觉得有用?点个[在看]支持作者继续创作! 👇

最新文章

随机文章