2012-04-13 133 views
1

我正在使用亞馬遜S3來存儲文件。存儲時,我正在加密流。再次下載時,我立即解密流。這個設置是工作得很好,但偶爾我得到以下例外 -javax.crypto.IllegalBlockSizeException的可能原因

javax.crypto.IllegalBlockSizeException:帶襯墊的密碼

解密時輸入長度必須是16的倍數可能是什麼原因可能錯誤發生。上載/下載過程中數據是否腐敗是其中一種可能性?如果是的話,只有當填充字節被破壞或文件中的任何字節被破壞時纔會發生這種情況?

[編輯]但奇怪的是,存儲在S3中的文件大小是適當的,它不像只有一半的文件被存儲。

+0

你只會得到這個填充異常,或者你也得到其他的(非法填充異常)? – 2012-04-14 10:50:40

+0

是的,我也得到填充異常 - java.io.IOException:錯誤關閉流:javax.crypto.BadPaddingException:給定最終塊沒有正確填充 – 2012-04-16 06:55:27

回答

1

是的。它最有可能是你收到部分文件。您應該能夠檢查連接是否在完成之前中止。爲確保獲得完整的,未更改的文件,請添加(H)MAC或使用具有完整性驗證的密碼模式(例如GCM)。

[編輯]:不,這特別是解密異常應該只發生在完整文件不可用時,而不是當文件本身被破壞時。接收時更好地檢查文件處理(忘記關閉流或刪除部分文件)。

+0

你確定你的源是添加填充?你確定你使用相同的填充作爲源代碼嗎?不匹配的填充可能會導致此問題。 – rossum 2012-04-13 21:32:58

+0

@Rossum,你爲什麼回答我的回答?看起來提問者自己也在加密解密...... – 2012-04-13 22:02:26

+0

是的,我在加密和解密時進行加密,同時下載和照顧填充。這個問題在千次嘗試中只發生一次,否則會成功。 – 2012-04-14 01:56:54

相關問題