我正在使用amazon S3来存储文件。存储时,我正在加密流。再次下载,我即时解密流。这个设置工作得很好但偶尔我会得到以下例外 -
javax.crypto.IllegalBlockSizeException:使用填充密码解密时输入长度必须是16的倍数
发生此错误的原因可能是什么。上传/下载过程中的数据损坏是否可能?如果是,仅当填充字节损坏或文件中的任何字节损坏时才会发生这种情况吗?
[编辑]但奇怪的是存储在S3中的文件大小是正确的,它不像只有一半的文件被存储。
答案 0 :(得分:1)
是的,确实如此。它最有可能是您收到部分文件。您应该能够在完成之前检查连接是否中止。为了确保获得完整的,未更改的文件,请添加(H)MAC或使用具有完整性验证的密码模式(例如GCM)。
[编辑]:不,这个特定的解密异常只应在完整文件不可用时发生,而不是在文件本身被破坏时发生。最好在接收时检查文件处理(忘记关闭流或删除部分文件)。