2024-05-16 10:03:53 发布
网友
我最近开始学习隐写术,遇到了一个我似乎不明白的问题。基本上,图像是一个png,其中包含一个隐藏的标志。你知道吗
从图像中提取位平面时,可以看到蓝色和绿色平面中有一个图像,而红色平面中有一个图像。要以明文显示标志,您必须通过XORing 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操作,为了简洁起见,只是用十六进制写的。你知道吗
& 0x07
如果你没有保留所有3个lsb,那么你要么在解决方案中丢失了一些字母,要么所有的东西都会在那里,但有些边缘不会那么平滑。其中第一个至关重要。你知道吗
实际上,隐藏图像位于最低的3位平面。做一个完整的分解可以清楚地说明这一点。你知道吗
首先将图像加载到一个numpy数组,该数组的维数为MxNx3。你知道吗
现在所要做的就是将每个颜色平面与另一个颜色平面异或,然后保留3个最低有效位(lsb)。你知道吗
如果不是很明显,
& 0x07
部分是一个二进制数为00000111的AND操作,为了简洁起见,只是用十六进制写的。你知道吗如果你没有保留所有3个lsb,那么你要么在解决方案中丢失了一些字母,要么所有的东西都会在那里,但有些边缘不会那么平滑。其中第一个至关重要。你知道吗
相关问题 更多 >
编程相关推荐