【发布时间】:2017-03-31 15:27:48
【问题描述】:
我正在尝试使用以下方法来处理使用 Apache Commons Crypto 的 AES 数据的加密和解密。加密工作正常。但是当我尝试解密刚刚加密的数据时,我得到了这个块大小错误,我不完全理解,因为我将块大小设置为 1024,当然是 16 的倍数。
javax.crypto.IllegalBlockSizeException: Input length (with padding) not multiple of 16 bytes
这是我的代码:
final int bufferSize = 1024;
try {
this.cryptoCipher.init(cipherMode, this.secretKeySpec, this.ivParameterSpec);
ByteBuffer inBuffer = ByteBuffer.allocateDirect(bufferSize);
ByteBuffer outBuffer = ByteBuffer.allocateDirect(bufferSize);
inBuffer.put(getUTF8Bytes(dataToBeEncrypted));
inBuffer.flip();
int updateBytes = this.cryptoCipher.update(inBuffer, outBuffer);
int finalBytes = this.cryptoCipher.doFinal(inBuffer, outBuffer); <<<< EXCEPTION HAPPENS HERE!!!
byte[] encoded = new byte[updateBytes + finalBytes];
outBuffer.flip();
outBuffer.duplicate().get(encoded);
encryptedDecryptedData = DatatypeConverter.printBase64Binary(encoded);
} catch (Exception exc) {
LOGGER.logp(Level.SEVERE, MODULE_NAME, methodName, "encountered exception: {0}", exc);
}
【问题讨论】:
标签: apache encryption aes