Python 使用 PIL(LSB) 进行图像处理

Python image manipulation using PIL(LSB)

我最近开始研究隐写术,但遇到了一个我似乎不明白的问题。基本上,图像是一个 png,其中包含一个隐藏的标志。

当您从图像中提取位平面时,您可以看到蓝色和绿色平面中有一个图像,您可以在红色平面中看到该图像。要以明文形式显示标志,您必须通过对 LSB 或其他方式进行异或运算,从红色图像中删除这些图像。我不太确定。

如果不删除其他图像,这就是红色平面中的图像的样子。

我的问题是我该如何着手做这种事情?这是有问题的图像。

其实隐藏图像在最低3位平面。进行完整的位分解可以清楚地说明这一点。

首先将图像加载到一个 numpy 数组,其尺寸为 MxNx3。

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

img = Image.open('stego.png')
data = np.array(img)

您现在要做的就是将每个颜色平面与另一个颜色平面进行异或,然后保留 3 个最低有效位 (lsb)。

extracted = (data[...,0] ^ data[...,1] ^ data[...,2]) & 0x07
plt.imshow(extracted)
plt.show()

为了不明显,& 0x07部分是与二进制数00000111的AND运算,为简洁起见,只写成十六进制。

如果您没有保留全部 3 个 lsb,那么您要么会在解决方案中丢失一些字母,要么一切都会在那里,但有些边缘不会那么光滑。其中第一个非常重要。