我们的一个客户将在我们的应用程序中上传一个ENCRYPTED文件,我们将该文件移动到我们的AIX服务器并解密它。该文件未正确解密。如果我通过SFTP手动将加密文件移动到AIX服务器,则解密工作完美但不是从Windows上载文件时。客户端加密和我们解密的关键是相同的。但是,对于所有加密文件都没有发生这种情况,对于少数文件存在问题,我们在这些文件中找不到任何不同的内容。我们使用Bouncy Castle生成密钥以及加密和解密。
例外:
javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Unknown Source)
解密代码:
public void decryptFile(InputStream fis, OutputStream fos)
throws IOException,
ShortBufferException,
IllegalBlockSizeException,
BadPaddingException
{
byte[] buffer = new byte[16];
int noBytes = 0;
byte[] cipherBlock =
new byte[decryptCipher.getOutputSize(buffer.length)];
int cipherBytes;
while((noBytes = fis.read(buffer))!=-1)
{
cipherBytes =
decryptCipher.update(buffer, 0, noBytes, cipherBlock);
fos.write(cipherBlock, 0, cipherBytes);
}
cipherBytes = decryptCipher.doFinal(cipherBlock,0);
fos.write(cipherBlock,0,cipherBytes);
fos.close();
fis.close();
}
我们如何处理这个问题?