簡體   English   中英

如何附加編號 個字節到字節數組?

[英]How to append no. of bytes to a byte array?

我正在'Steganography'中進行一個項目,該項目中我想使用'Blowfish'算法對文件內容進行加密,然后將加密后的文本嵌入圖像中,並執行相反的步驟來提取圖像。
來自“ Cipher”類的“ update”方法僅對某些加密。 個字節,但是在這里,我只希望將文件的所有字節(加密內容)放在一個數組中。 解密中的“更新”方法也是如此。 稍后將此數組傳遞給一種方法,其中我將文本嵌入圖像中,並在需要時提取。那么解決此問題的更好方法是什么?
謝謝。

大多數密碼都是流密碼。 它們可以獲取數據斑點,並在對結果進行加密/解密時流式傳輸結果。 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-offs。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM