1

我正在使用亚马逊 S3 存储文件。在存储时,我正在动态加密流。再次在下载时,我即时解密流。此设置运行良好,但有时我会遇到以下异常-

javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是 16 的倍数

发生此错误的可能原因是什么。上传/下载过程中的数据损坏是可能性之一吗?如果是,仅当填充字节损坏或文件中的任何字节损坏时才会发生这种情况吗?

[编辑] 但奇怪的是存储在 S3 中的文件大小是正确的,它不像只存储了一半的文件。

4

1 回答 1

1

是的。您最有可能收到部分文件。您应该能够检查连接是否在完成之前中止。为确保您获得完整的、未更改的文件,请添加 (H)MAC 或使用具有完整性验证的密码模式(例如 GCM)。

[编辑]:不,这个特定的解密异常应该只在完整文件不可用时发生,而不是在文件本身损坏时发生。接收时更好地检查文件处理(忘记关闭流或删除部分文件)。

于 2012-04-13T20:53:38.397 回答