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

时间:2010-06-10 20:10:26

标签: algorithm language-agnostic image steganography

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

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

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

3 个答案:

答案 0 :(得分:24)

  

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

我很久以前就为此写了一个库,所以我可以描述这个过程。

基本上,如果您有文件格式,请说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图像示例中,图像中总共有16像素* 3color_components = 48字节的数据。通常,您要做的是仅使用每个颜色分量的最低有效位来对图像进行编码。在这种情况下,您将拥有48位可用数据= 6个字节可用于编码您想要的任何6字节消息。

为了简化这一过程,我们只需看一下将一个简单的3位消息编码为单个像素。我们假设我们每个颜色组件只使用1位。 假设我们要编码3位消息:111

以下是编码数据之前上面的值像素1 的示例:

R:10101011
G:11111010
B:00011010

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

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

像素看起来与人眼相同,但现在您使用最低有效位来表示您想要编码的数据。

如果要将超过3位的数据编码到单个像素中,您也可以这样做。会发生的是,您将编码的不仅仅是最低有效位,您可以使用至少2个有效位,或至少3,等等。您使用的位越多,您将开始注意到的一点点差异。画面质量。您最多可以使用7位,您的图像仍然可以识别。

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

要完成这类工作,您可能需要创建一些函数,以便轻松处理数据位,从而逐渐消除了逐位运算符处理的复杂性。

该技术因不同的文件格式而异,但概念是相同的。隐写术也可以仅指隐藏数据,例如甚至在GIF扩展块中。通常,您可以通过改变图像的像素来隐藏它,或者以某种文件格式隐藏颜色查找表。

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

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

  

如果没有源图像,程序如何识别图像中的加密消息?

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

答案 1 :(得分:4)

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

有关概述,请参阅this page

答案 2 :(得分:2)

在图像中隐藏信息的方式确实无穷无尽。

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