在阅读了一些关于使用 Java/.NET 的隐写术的教程后,我的印象是,您从秘密图像中获取每个单独的像素,然后将其放置在封面图像中每个单独像素的最低位中。
我在这方面是正确的吗?
在阅读了一些关于使用 Java/.NET 的隐写术的教程后,我的印象是,您从秘密图像中获取每个单独的像素,然后将其放置在封面图像中每个单独像素的最低位中。
我在这方面是正确的吗?
隐写术是将信息隐藏在另一种信息中。这里的目标是隐藏信息。
这样做的一种方法是通过将秘密存储在每个像素的最低位中来隐藏图像中的秘密信息。虽然这可能会愚弄你的弟弟,但这是隐藏信息的一种非常糟糕的方式,因为:
任何关心它的人都知道,因此会知道检查最低位。
它改变了图像的概率属性,它会向另一个寻找“秘密”的人抛出一个危险信号。例如,请参阅Stegdetect - 一种用于检测图像中隐写内容的自动化工具。
更安全的隐写术形式可以是写一张便条,其中一些字母的位置包含秘密信息。诀窍是使用隐写术将信息隐藏在计算机不擅长分析的事物中(人类语言、符号的含义或意义、歌曲)。位操纵很容易被计算机检测到。
请记住在将秘密信息放入隐写消息之前对其进行加密。这样,如果他们发现了消息,他们就不会知道您试图发送的内容,并且因为大多数密码会从非常随机的输入(人类语言、图像等)中产生相当随机的输出,如果有人正在调查该消息,他们可能会将其误认为是随机噪声。
如果您想了解更多信息,这里有一些关于隐写术的好论文:
是的,使用了最低(冗余/噪声)位。
隐写术实际上是关于数据隐藏,无论数据是否被隐藏,或者提供掩护的东西是图像。可以使用任何具有足够冗余的数据格式。X86 指令集就是一个很好的例子。其他地方包括文件系统的未使用部分。
您是正确的,在使用图像存储隐藏数据时,低阶颜色位是存储它们的正确位置。但是,我建议不要尝试关联图像之间的像素。大多数图像格式从原始像素表示中提供某种压缩。最好直接从文件系统中读取隐藏图像的位流,并将这些位与主机图像中的像素相关联。这将需要更小的主机映像。