🔍 隐写术实战:如何用Python在图片中藏秘密信息?(附工具包)
引言
"这张普通的猫咪图片里,其实藏着一份绝密文件!"
你是否在电影中见过这样的场景?黑客轻敲键盘,就能把信息隐藏在看似普通的图片中。这并非科幻,而是**隐写术(Steganography)**的经典应用。今天,我将带你用Python实现这个"魔术",让你也能在朋友圈玩转信息安全小把戏!
点击上方蓝字关注「白帽工具箱」,回复「隐写」获取文末福利工具包 ⬆️
一、隐写术原理:看不见的信息如何藏身?
1.1 什么是隐写术?
隐写术(Steganography)源于希腊语,意为"隐蔽的书写"。与加密技术不同,它不改变信息内容,而是隐藏信息的存在。常见载体包括:
1.2 LSB隐写原理
今天我们重点讲解最基础的LSB(Least Significant Bit)隐写技术:
- 例如:把像素值
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 容量计算技巧
- 800x600图片最大可藏:800×600×3÷8≈180KB文本
3.2 增强隐蔽性
# 加密前先压缩消息(需zlib库)
import zlib
message = zlib.compress(message.encode()).hex()
3.3 常见报错解决
ValueError:无法修改只读数组 → 添加pixels.setflags(write=True)- 提取乱码 → 检查加密/解密使用的通道顺序是否一致
四、总结回顾
五、互动与福利
💬 互动话题:如果你要隐藏一段话,会选择藏在哪种类型的图片里?为什么?在评论区分享你的创意!
🎁 粉丝福利:
关注公众号回复「隐写」获取:
🔒 法律声明:本技术仅限学习交流,请勿用于非法用途。实验建议使用自拍照片作为载体。
觉得有用?点个[在看]支持作者继续创作! 👇