我需要解码来自BMP图片中顶部像素的消息。二进制中的红色值中隐藏有一条消息。我试图找到一种方法来做到这一点并没有成功,因为大多数程序使用.jpg或.png文件类型的图像和BMP图像不能在该代码中工作。我需要找出如何反转此代码以使用数组解码消息,我需要以ASCII文本打印消息。对于某些程序,他们允许我排列图像的顶行,但我不知道如何打印它。以下是在图像中对消息进行编码的代码:
import java.awt.*;
class Encode
{
public void encodeMessage(Picture image, int [] binaryArray)
{
Pixel pixelTarget = new Pixel(image,0,0);
Pixel [] pixelArray = image.getPixels();
Color pixelColor = null;
int redValue = 0;
for(int x = 0; x < binaryArray.length; x++)
{
redValue = binaryArray[x];
pixelTarget = pixelArray[x];
pixelTarget.setRed(redValue);
}
pixelTarget = pixelArray[binaryArray.length];
pixelTarget.setRed(255);
image.write("SecretMessage.bmp");
image.explore();
}
}
public class EncodeTester
{
public static void main(String[] args)
{
int[] bitArray = {0,1,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,0,0,1,1,1,1,0,0,1};
Picture image = new Picture("earth.bmp");
Encode message = new Encode();
message.encodeMessage(image, bitArray);
}
}
有人可以解释如何继续或编写示例代码供我阅读bmp文件,从数组中获取红色值并以ASCII文本打印出来。感谢
编辑:这不完全是steganograhpy。它是不同的,因为代码只隐藏在第一行,我需要使用int []数组来排列所有像素,然后排列像素的顶行,然后打印出ASCII文本中的红色值。
答案 0 :(得分:1)
我不熟悉类Picture
和Pixel
,因为它们不在标准库中,但如果this是您正在使用的Pixel
类,尝试以下方法:
decodeMessage(Picture image)
,并使用Pixel
获取image.getPixels()
数组,就像在encodeMessage()
中一样。255
作为序列结束的指示符)并使用pixelTarget.getRed()
读取值。这些值对应于编码的二进制值。为这些位生成一个数组。int
值转换为char
值(例如here)。* char
构造函数,将String
数组转换为String
。(*)请记住,二进制表示是不明确的,因此您必须确定用于ASCII位的字节顺序。