2010-11-07 98 views
1

我正在做'隐写术'中的一个项目,我想用'Blowfish'算法对文件内容进行加密,然后想要在图像中嵌入加密文本,并执行相反的过程来提取图像。
'Cipher'类中的'update'方法仅加密一些编号。的字节,但是,在这里我只需要一个数组中的文件的所有字节(加密内容)。 “解密”中的“更新”方法也是如此。这个数组稍后将被传递给一个方法,在该方法中我将文本嵌入到图像中,并在需要时进行提取。对于这个问题,更好的方法是什么?
谢谢。如何追加no。的字节数组到字节数组?

+0

@Will哈同:谢谢。这个想法终于奏效了。我用这个'加密'。 :) – Supereme 2010-11-08 05:46:34

回答

5

大多数密码是流式密码。他们可以在数据加密/解密时获取数据并流出结果。 Java Cipher类以这种方式工作。您用一块数据调用update(..),并返回一个加密数据块。当你到达输入数据的末尾时,你调用final(...)方法。

现在,如果您希望将所有数据累积到一个二进制缓冲区中,并且一次加密它,那么也可以正常工作。但最终,无论哪种方式都行得通,密码并不关心它是否一次加密1个字节,或者每次加密1MB。

如果您只是想知道如何附加字节数组,您只需创建一个长度等于您想要附加的数组大小之和的新字节数组,然后使用System.arraycopy移动复制原始数据阵列。

byte[] newbuf = new byte[oldbuf1.length + oldbuf2.length]; 
System.arraycopy(oldbuf1, 0, newbuf, 0, oldbuf1.length); 
System.arraycopy(oldbuf2, 0, newbuf, oldbuf1.length, oldbuf2.length); 

如果你打算做了很多,你有空闲时间,最好是积累的数据块中不同的字节的缓冲区,在列表他们的东西,然后做内存的最终合并一次。

int sum = 0; 
for(byte[] ba : arraysList) { 
    sum = sum + ba.length; 
} 
byte[] newbuf = new byte[sum]; 
int curpos = 0; 
for(byte[] ba : arraysList) { 
    System.arraycopy(ba, 0, newbuf, curpos, ba.length); 
    curpos = curpos + ba.length; 
} 

(代码没有测试,应该工作,不认为有任何1权衡在那里。)