使用Raster将不可见消息放入图像的四个部分

时间:2014-01-15 02:06:15

标签: image raster steganography lsb

我从这个网站找到了一个教程Steganography(它还包括代码),我想将四条信息放入图像的四个不同部分,因为我画了链接Four parties of image,但是我我不确定如何准确地将消息放到四节中。这是我使用下面的光栅

修改的代码的一部分
private byte[] get_byte_data(BufferedImage image) {
    WritableRaster raster = image.getRaster();

    int imageHeight=image.getHeight()/2;
    System.out.println("ImageHeight: "+imageHeight);
    int imageWidth=image.getWidth()/2;
    System.out.println("ImageWidth: "+imageWidth);
            DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
    return buffer.getData();
}

如何将消息放入我想要的确切部分?

2 个答案:

答案 0 :(得分:1)

隐写术和Java图像处理的概念应该分开理解。 在隐写术中,我们将隐藏消息的字节嵌入到载波消息的字节中。 在载体的字节数组中,我们无法根据您的要求确定每个图像部分的开始位置。

所以你要做的就是这个。首先将载波图像分割为四个单独的图像,然后根据需要附加隐藏数据字节的字节。 然后创建新的图像对象,并在正确的位置绘制这四个分离的图像。

答案 1 :(得分:1)

我将根据您之前的相关问题提供my answer

在那里,我向您展示了如何在图像的每个R,G,B和A组件中隐藏不同的消息,方便地为4.要使用它,将第一条消息嵌入R并保存输出。然后加载该输出并将下一条消息存储在G中并重新保存输出。等等......由于每条消息都使用了每个颜色组件,因此每条消息的最大大小可以为(p - 32)/ 8。

优点:它有效地实现了您的目标,代码已经存在,最大容量可能。

缺点:由于加载,使用起来非常麻烦 - >嵌入 - >保存x4方面。


现在,如果您真的坚持并且想要将图像分成4个部分,则必须在代码中应用以下更改(从上一个问题开始,但从网站上提供的原始文件开始):

  • 更改GUI,使其有4个文本框。
  • 加载完整图片后,只在embedMessage方法中传递四分之一。四个象限应该有坐标(0:maxX / 2,0:maxY / 2),(0:maxX / 2,maxY / 2:maxY),(maxX / 2:maxX,0:maxY / 2)和(maxX) / 2:maxX,maxY / 2:maxY),其中maxX = yourimage.getWidth()maxY = yourimage.getHeight()。您可以使用图片数据上的getSubimage方法执行此操作。

问题在于,对于每个象限,您仍然嵌入一个颜色组件,因此每条消息的有效性不能超过(p / 4 - 32)/ 8,这几乎是我建议的容量的4倍方法

通过嵌入每个象限的所有R,G,B和A组件,您可以实现上述最大容量。这也是我向你展示了如何在我的链接答案中做的事情。

所有这些都需要进行一些代码修改,但我已经为您提供了所有要进行的更改的概念和逻辑结构。

优点:使用4个短信框很方便。

缺点:与上述其他建议相比,需要花费相同的最大容量对修改进行编码。