什么是基本和最简单的 隐写算法 和方法?
我的意思是应用于图像的隐写术。
一个将数据隐藏到图像的简单程序是如何工作的?主要使用哪些技术?程序如何在没有源图像的情况下识别图像中的加密信息?
最佳答案
很久以前我为此编写了一个库,因此我可以描述这个过程。
基本上,如果您有文件格式,假设是 24 位 BMP 格式。首先,您需要一种将像素读取和写入该文件格式的方法。一旦您了解了文件格式是什么,您可以使用库或编写自己的库。
图像可以被视为一系列像素。考虑一个 4x4 像素的图像:
将这些像素从 1 到 16 编号:
上面编号的每个像素都有一个红色分量、一个绿色分量和一个蓝色分量。这些组件中的每一个都是 1 个字节,因此可以将每个组件视为 0 到 255 的值。(24 位 = 8 位代表红色,8 位代表绿色,8 位代表蓝色)。所以上面的每个数字都有 3 组从 0 到 255 的值。
因此,在上面使用 4x4 图像的示例中,您的图像中总共有 16pixels*3color_components = 48 字节的数据。通常,您将只使用每个颜色分量的最低有效位来对图像进行编码。在这种情况下,您将有 48 位数据位可供您使用 = 6 个字节可供您编码所需的任何 6 字节消息。
为了使这更容易,让我们看看将简单的 3 位消息编码为单个像素。假设我们只使用每个颜色分量 1 位。
假设我们要对 3 位消息进行编码:111
这是在对数据进行编码之前,上面的值 pixel 1 的示例:
电话:10101011
电话:11111010
乙:00011010
您所做的只是将最低有效位更改为新数据:
R: 1010101 1
G: 1111101 1
乙:0001101 1
像素在人眼看来是一样的,但现在您使用最低有效位来表示您想要编码的数据。
如果您想将超过 3 位的数据编码为单个像素,您也可以这样做。发生的情况是,您将编码的不仅仅是最低有效位,您可以使用至少 2 个有效位,或至少 3 个等。您使用的位越多,您将开始注意到在画面质量。虽然您最多可以使用 7 位,但您的图像仍然可以识别。
通常,您要编码的数据要多于 3 位。您想要编码的数据越多,您要么拥有更多像素,要么每像素使用更多位来编码数据。假设您有 9 位数据要编码,如果您只使用最低有效位,那么您需要 3 个像素来编码该信息。如果您只想使用 1 个像素,则可以通过使用每个颜色分量的 3 个最低有效位来编码该数据。
要完成这种类型的工作,您可能需要创建一些函数来轻松处理数据位,从而抽象出不断处理按位运算符的复杂性。
对于不同的文件格式,该技术会有所不同,但概念是相同的。隐写术也可以仅指隐藏数据,例如在 GIF 扩展块中。通常,您可以通过改变图像的像素或在某些文件格式中使用颜色查找表来隐藏它。
一些图像在标题中有一个颜色查找表,然后像素是这些颜色查找表的索引。您可以做的是重新排序颜色查找表,使最相似的颜色靠近在一起,然后您可以将数据编码到颜色查找表本身和像素的索引中。因为索引稍微改变也没关系,因为查找表是根据相似度排序的。
不过,您确实需要了解文件格式才能完成此类工作。或者至少使用一个可以为您操作文件格式和文件数据的库。如果你真的对这个话题感兴趣,我建议你从一个简单的文件格式开始,比如 BMP 并学习它。您始终可以在 www.wotsit.org 等网站上找到文件格式规范。
你是对的。解码信息的程序不需要源图像。
这是如何工作的,它只是反过来,程序需要知道您使用多少位数据编码并使用相同的数据进行解码。它将简单地遍历每个像素并将这些位组合成字节并将这些字节写入文件。
关于algorithm - 简单/基本的隐写算法和方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3018086/