クライアントの 1 つが 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();
}
これをどのように処理しますか?