2010-11-07 136 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權衡在那裏。)