隐写术(将文本写入png文件)不起作用?

时间:2011-11-22 02:03:26

标签: java steganography

我有一个程序用于将文本文件写入png文件,但它不起作用 - 当我解码时,图像返回不正确的字符,有时图像没有正确显示。这是我的代码:

public static void readText(String text, int[] pixArr, BufferedImage im, File outFile)
throws FileNotFoundException, IOException{
    char[] txt = text.toCharArray(); //Changes text file to array of characters
    int[] eightBit=new int[8]; //stores binary representation of characters
    for (int i=0;i<txt.length;i++){
        int hey=txt[i];
        for (int a=0;a<8;a++){     //converting text to binary
            eightBit[a]=hey%2;
            hey=hey/2;
            }
        eightBit=reverseArray(eightBit);
        insertion(pixArr, eightBit);
        }
    BufferedImage norm = new BufferedImage(im.getWidth(), im.getHeight(),
                                   BufferedImage.TYPE_INT_ARGB);
    norm.getGraphics().drawImage(im, 0, 0, null);
    ImageIO.write(im, "png", outFile);
    }   

public static void insertion(int[] pixArr, int[]eightBit){
    for (int i=0;i<pixArr.length;i++){
        for (int a=0;a<eightBit.length;a++){
            int temp=pixArr[i];
            temp=temp/2;
            temp*=2;
            pixArr[i++]=eightBit[a]+temp;
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

我认为您需要从代码中退一步,看看修改哪些数据结构的位置。

声明一个数组eightBit以跟踪一个字节的八位。那很整齐。 (它应该是一个子程序,以便您可以更轻松地调试它。)但是您将输出结果传递给insertion(pixArr,eightBit)。按照insertion()调用,您会看到每次调用都给它相同的 pixArr数组 - 并且没有机制写入不同的后续调用中pixArr数组的部分。

此例程提供的最佳是写入8位。

哪八位?最后八位。

但是我从未看到int pixArr[]被传递回实际写入png的代码。

我强烈建议将此问题拆分为更小的部分并单独测试每个部分

答案 1 :(得分:2)

这并不能完全回答您的问题,但如果您将代码分开并使用有意义的变量名称,您会发现代码更容易调试。这不是俄罗斯方块,你不必把所有东西塞进尽可能小的空间:)

我绝对同意sarnold - 你应该将你的问题分解成小的,独特的,可测试的子程序;这将有助于您识别代码中有效的部分以及不能代码的部分。