欢迎在有关隐肌术的一系列文章中获得第一篇。我发现的东西既迷人又奇怪地利用了。如果您正在阅读本文,则可能会对它是什么有所了解,但是以防万一,这是数字上下文中的简短描述。
隐志是在另一个消息或物理对象中表示信息的做法,以使信息的存在对人类检查不明显。
在广泛的水平上确实很简单。您要采取想要隐藏的东西(目标),另一个消息/图像(封面)并操纵封面材料,以使原件可检索但不可见。。
有许多应用程序,例如监视资产通过系统,标记资产,向人们发送编码消息,甚至嵌入元数据,以免被自动化流程剥离。
有多种方法可以实现这一目标,但是主要的方法和本文我将重点的一种方法称为LSB(最不重要的位)。在这里,您可以将封面图像的像素值列出,并将最小有意义的位从目标图像中进行“存储”数据(一次)。这是一个快速的python示例,可以在图像中隐藏一些文本:
from PIL import Image
def encode():
start = '#####'
stop = '*****'
full = start + 'Some string that you want to encode into an image' + stop
binary_text = ''.join('{0:08b}'.format(ord(x), 'b') for x in full)
print(binary_text, len(binary_text))
with Image.open("file.png") as im:
i = 0
w, h = im.size
for x in range(0, w):
for y in range(0, h):
if i >= len(binary_text):
i = 0
bit = binary_text[i]
pixel = im.getpixel((x, y))
if bit == "0":
# Is odd, should be even.
if pixel[0] % 2 != 0:
new_pix = (pixel[0] - 1, pixel[1], pixel[2])
im.putpixel((x, y), new_pix)
else:
# Is even, should be odd.
if pixel[0] % 2 == 0:
new_pix = (pixel[0] - 1, pixel[1], pixel[2])
im.putpixel((x, y), new_pix)
i += 1
im.save("file_enc.png")
这样,您将一些文本转换为文本的字符串二进制表示,循环通过 pixel并更改红色值(哪种颜色大多是任意的,红色通常是在拆分时首先出现的像素数据)以匹配二进制值。这将遍历整个图像,循环遍历二进制文本,然后将其编码到图像中。这可能对您来说是过分的,但它提供了基本的前提。
ðâ
请注意使用开始和停止字符串。这在完整循环中编码时很重要,因为没有它,您将不知道实际字符串的编码位置。这对于以后的鲁棒性也非常有用。
解码/检索部分只是相反。获取像素值,从红色像素值的LSB重建二进制字符串,然后将其转换回标准字符串。
def decode():
start = '#####'
stop = '*****'
binary_stop = ''.join('{0:08b}'.format(ord(x), 'b') for x in stop)
with Image.open("file_enc.png") as im:
w, h = im.size
binary_text = ''
for x in range(0, w):
for y in range(0, h):
pixel = im.getpixel((x, y))
if binary_text.endswith(binary_stop):
message = "".join([chr(int("".join(binary_text[i:i + 8]), 2)) for i in
range(0, len(binary_text) - 8, 8)])
start_point = message.find(start) + len(start)
end = message.find(stop)
message = message[start_point:end]
return message
if pixel[0] % 2 != 0:
binary_text += '1'
else:
binary_text += '0'
正如我所说,这是一个非常简单的实现。它是按行完成的,在图像中逐列,并在整个图像上重复,因此不是很健壮。这也是最常见的形式,因此根本不抵抗stemanlysis。
这就是全部。现在,以上不是性能,它可以得到改进,但应该为开始在您的应用中实现隐形功能提供良好的基础。
可以在我的gitlab上找到一个完整的工作示例,这里:https://gitlab.com/Vapourisation/steganography_python_example
提供