基于隐写术方法的Python程序,使用最低有效位技术将文件隐藏在图像中。
我使用了最基本的方法,即最低有效位。一个彩色像素由红色、绿色和蓝色组成,每个颜色编码为一个字节。其思想是将信息存储在每一个像素的RGB分量的第一位中。在最坏的情况下,十进制值的差异为1,人眼无法察觉。实际上,如果空间不足以将所有数据存储在每一个像素的第一位中,则应开始使用第二位,以此类推。需要记住的是,在图像中存储的数据越多,就越容易被检测到。
LSBSteg模块基于OpenCV将数据隐藏在图像中。它使用每个像素的第一位以及图像的每一种颜色。代码相当易于理解;如果所有第一位均已被使用,模块将开始使用第二位,因此数据量越大,图像的改变就越明显。如果图像中有足够的空间,程序可以隐藏所有数据。主要功能包括:
仅支持无压缩的图像,即不支持JPEG,因为LSB位可能在压缩阶段被篡改。
此工具仅需要OpenCV及其依赖项。
pip install -r requirements.txt
LSBSteg.py
用法:
LSBSteg.py encode -i <输入> -o <输出> -f <文件>
LSBSteg.py decode -i <输入> -o <输出>
选项:
-h, --help 显示此帮助
--version 显示版本
-f,--file=<文件> 要隐藏的文件
-i,--in=<输入> 输入图像(载体)
-o,--out=<输出> 输出图像(或提取的文件)
文本编码:
# 编码
steg = LSBSteg(cv2.imread("my_image.png"))
img_encoded = steg.encode_text("my message")
cv2.imwrite("my_new_image.png", img_encoded)
# 解码
im = cv2.imread("my_new_image.png")
steg = LSBSteg(im)
print("文本值:", steg.decode_text())
图像隐写术:
# 编码
steg = LSBSteg(cv2.imread("carrier.png"))
new_im = steg.encode_image(cv2.imread("secret_image.jpg"))
cv2.imwrite("new_image.png", new_im)
# 解码
steg = LSBSteg("new_image.png")
orig_im = steg.decode_image()
cv.SaveImage("recovered.png", orig_im)
二进制隐写术:
# 编码
steg = LSBSteg(cv2.imread("carrier.png"))
data = open("my_data.bin", "rb").read()
new_img = steg.encode_binary(data)
cv2.imwrite("new_image.png", new_img)
# 解码
steg = LSBSteg(cv2.imread("new_image.png"))
binary = steg.decode_binary()
with open("recovered.bin", "rb") as f:
f.write(data)
此软件采用MIT许可证。