2017-07-29 78 views
0

我有一個程序,加密解密數據使用對稱密鑰。編碼/解碼和使用可變緩衝區加密/解密的影響

在加密過程I:

  • 加密數據
  • 的Base64編碼它

在解密期間:

  • Base64編碼解碼它
  • 解密

它工作正常的數據。現在我正試圖在流緩衝區上執行此過程。假設加密是通過上面提到的大部分數據的程序完成的,並且只有在流式傳輸時纔會進行解密。

在這種情況下做的緩衝區大小/塊大小與我的編碼數據無論何時我解碼嗎?

如果我在3000字節的緩衝區中編碼數據,我還應該讀取多達3000字節並解碼?或者這是無關緊要的?

此外解密時,應該予使用相同的緩衝器大小的我用於傳遞數據到密碼解密

我嘗試用獨立程序的不同值,它工作正常。然而,當我嘗試streamingly做到這一點:

  1. 獲取一些字節
  2. 解碼它
  3. 解密
  4. 保存到文件
  5. 下一組字節解密保留追加到相同文件。

這種方式似乎適用於某些尺寸的數據,而不適用於其他尺寸的數據。並且數據的最終尺寸如同的字符lexx 2-4字節

我在這裏錯過了一些重要的原則嗎?或者是我可能在邏輯或循環中導致某些字節被遺漏的錯誤?

如果是後者,我會更深入地檢查它。

謝謝
沙比爾

+0

我不知道你的加密算法是什麼,但通常你需要一個[流暗號算法(https://en.wikipedia.org/wiki/Stream_cipher)正常執行流式內容的加密/解密。 – Fabien

+1

*「如果我在3000字節的緩衝區中編碼數據,我應該也讀取多達3000字節並解碼?或者它是否無關緊要?」 - - 它應該無關緊要一個內部的「環形」緩衝區,以防你選擇的塊大小不能被4整除)。 –

+0

使用** 3000 **的緩衝區大小,我檢查了流式解碼字節的輸出(通過將其附加到一個文件)和批量解碼字節。他們似乎是平等的。但是,當我(解密+解密)並連續追加到文件時,最終輸出與批解密不同。 – Shabirmean

回答

0

感謝上面的提示。我能解決我遇到的問題。

如上緩衝區大小本身沒有多大關係的評論時提到解碼解密將數據作爲流。

然而,對於這個問題的原因我是因爲我初始化CipherOutputStream進入數據的每一個新塊。當我在開始時只初始化一次,併爲單個加密數據包的所有塊維護它時,流程照常工作,沒有問題。

CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher); 

對於流中的所有塊都進行了一次這樣的操作。

感謝
沙比爾