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

时间:2019-10-02 03:54:43

标签: python image python-imaging-library steganography

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

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

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

Image of what it does if you don't remove the other images

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

Here's a link to the image in question

1 个答案:

答案 0 :(得分:2)

实际上,隐藏的图像位于最低的3位平面中。进行完整的分解很清楚。

Red plane bit decomposition

首先将图像加载到一个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()

extracted message

如果不太明显,& 0x07部分是一个AND运算,其二进制数为00000111,为简洁起见,仅以十六进制表示。

如果您不保留所有3个lsb,那么您要么在解决方案中缺少一些字母,要么所有内容都将存在,但某些边缘将不那么平滑。其中第一个至关重要。