简单/基本的隐写算法和方法

Posted

技术标签:

【中文标题】简单/基本的隐写算法和方法【英文标题】:Simple/Basic steganography algorithms and methods 【发布时间】:2011-03-02 09:04:06 【问题描述】:

什么是基本和最简单的隐写算法和方法?

我的意思是应用于图像的隐写术。

将数据隐藏到图像的简单程序如何工作?使用的主要技术是什么?程序如何在没有源图像的情况下识别图像中的加密消息?

【问题讨论】:

在没有源图像的情况下识别图像中的加密消息? - 我猜是校验和。顺便说一句,您应该区分计算机隐写术和现实世界。他们通常使用不同的技术。 【参考方案1】:

修改位图像素的最低有效位。

如需概览,请参阅this page

【讨论】:

【参考方案2】:

实际上有无数种方法可以隐藏图像中的信息。

一种简单的方法是注意更改每个 RGB 值的最低有效位不会产生明显的差异,因此设置图像中每个字节的最低有效位会给我们(#-bits-in-image / 8) 位来存储隐藏数据在。

【讨论】:

【参考方案3】:

什么是基本和最简单的隐写算法和方法?我的意思是应用于图像的隐写术。

我很久以前为此编写了一个库,因此我可以描述该过程。

基本上,如果您有文件格式,比如说 24 位 BMP 格式。首先,您需要一种将像素读取和写入该文件格式的方法。了解文件格式后,您可以使用库或编写自己的库。

可以将图像视为一系列像素。考虑一个 4x4 像素的图像:

x x x x x x x x x x x x x x x x

将这些像素编号从 1 到 16:

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 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 的值的示例:

R: 10101011 联系人:11111010 乙:00011010

您所做的只是将最低有效位更改为新数据:

R: 1010101 1 G: 1111101 1 B: 0001101 1

像素在人眼看来是一样的,但现在您使用的是最低有效位来表示要编码的数据。

如果您想将超过 3 位的数据编码到单个像素中,您也可以这样做。发生的情况是,您将编码的不仅仅是最低有效位,您可以使用最低 2 个有效位,或至少 3 个,等等。您使用的位越多,您将开始注意到在画面质量。不过,您最多可以使用 7 位,并且您的图像看起来仍然可以识别。

通常,您想要编码的数据远不止 3 位。您要编码的数据越多,您就必须拥有更多的像素,或者每个像素使用更多的位来对数据进行编码。假设您要编码 9 位数据,如果您只使用最低有效位,那么您需要 3 个像素来编码该信息。如果您只想使用 1 个像素,但您可以通过使用每个颜色分量的 3 个最低有效位来对该数据进行编码。

要完成此类工作,您可能需要创建一些函数来轻松处理数据位,从而抽象出不断处理位运算符的复杂性。

对于不同的文件格式,技术会有所不同,但概念是相同的。隐写术也可以仅指将数据隐藏在例如 GIF 扩展块中。通常,您可以通过改变图像的像素来隐藏它,或者在某些文件格式中通过颜色查找表来隐藏它。

一些图像在标题中有一个颜色查找表,然后像素是这些颜色查找表的索引。您可以做的是重新排序颜色查找表,以便最相似的颜色靠近在一起,然后您可以将数据编码到颜色查找表本身和像素的索引中。因为索引是否略有变化并不重要,因为查找表是根据相似排序的。

您确实需要了解文件格式才能完成此类工作。或者至少使用可以为您处理文件格式和文件数据的库。如果你真的对这个主题感兴趣,我建议从一个简单的文件格式开始,比如 BMP 并学习它。您始终可以在 www.wotsit.org 等网站上找到文件格式规范。

程序如何在没有源图像的情况下识别图像中的加密消息?

你是对的。解码信息的程序不需要源图像。 它的工作原理是它只是反过来,程序需要知道你使用了多少位数据编码并使用它来解码。它会简单地遍历每个像素并将这些位组合成字节并将这些字节写入文件。

【讨论】:

非常详尽的答案,很好地描述了“最低有效位更改”方法。谢谢。 对于基于调色板的格式,您可以减少真实颜色的数量以释放一些索引,然后用最流行颜色的 RGB 填充它们。这样可以避免图片中的噪点。消息的编码与仅对位进行切片并在图像中替换它们会有些不同。那是因为您可以分配 3 个索引,如果图像中有 2 个位置,您将有 3**2 = 9 条不同的消息。 是的,对于隐写术的定义,基本上没有硬性事实规则,如果您了解文件格式并且有创意,那么您可以完成它。

以上是关于简单/基本的隐写算法和方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python PIL 的隐写算法

PDF文件中的隐写术[关闭]

从0开始学杂项 第四期:隐写分析 GIF 图片隐写

base64stego 还不懂base64的隐写,详解15行代码带你领略

是否存在可以抵抗图像处理的数字图像隐写算法?

ctf中关于图片的隐写随笔(不全)