1
我正在嘗試使用以下方法來處理使用Apache Commons Crypto的AES數據的加密和解密。加密工作正常。但是當我嘗試解密剛剛加密的數據時,我得到了這個塊大小錯誤,我並不完全明白,因爲我將塊大小設置爲1024,當然這是16的倍數。Apache Commons Crypto - 獲取IllegalBlockSizeException
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);
}
謝謝,Zaph。我使用'AES/CBC/PKCS5Padding'作爲變換值。我在其他地方看到,這應該在inyernally自動轉換爲PKCS7。但是,我只是嘗試將其更改爲'AES/CBC/PKCS7Padding',現在我得到一個錯誤: 導致:javax.crypto.NoSuchPaddingException:填充:未實現PKCS7Padding 我正在使用IBM Java 7.1。 – Westy
使用'AES/CBC/PKCS5Padding',PKCS#5填充是PKCS#7的一個子集,但在所有實現中,它都支持PKCS#7。由於許多庫在AES之前都會繼續使用相同的填充常量。 – zaph
好的,謝謝。問題是,這就是我一直在使用的,這就是我的錯誤。所以我現在有點失落。請參閱下面的「答案」(因爲無論出於何種原因,評論從未爲我正確格式)。 – Westy