如何追加没有.字节到字节数组?

Sup*_*eme 1 java

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

Wil*_*ung 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);
Run Code Online (Sandbox Code Playgroud)

如果你要做那么多,并且你有足够的内存,最好将你的数据块累积到不同的字节缓冲区中,将它们填入List中,然后再进行一次最后的合并.

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;
}
Run Code Online (Sandbox Code Playgroud)

(代码未经测试,应该有效,不要认为那里有任何一次性.)