我知道類似的問題已經被問到,但我無法解決他們中的任何問題。文件解密:IllegalBlockSizeException:解密後的最後一個塊不完整
我有已與以下UNIX命令創建加密文件:
tar cf FILES | gzip | openssl enc -k PASSWORD -aes-256-cbc -e > OUTPUT.tar.gz.enc
我可以成功地解密與相關聯的命令的文件。
我必須在Java進程中解密這個文件。我使用了this SO answer中提供的代碼。
我使用相同的EVP_BytesToKey
功能,但略有不同main
函數。
這是我的加載加密文件:
byte[] headerSaltAndCipherText = IOUtils.toByteArray(new
InputStreamReader(new FileInputStream(f)));
在該示例代碼,似乎數據以base64編碼。然而,當我看到我的文件,它不是(我可以清晰的看到「Salted__」標頭)
我創建了easCBC
對象是這樣的:
Cipher aesCBC = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
我在頂部加Security.addProvider(new BouncyCastleProvider());
main
函數。我開始使用BouncyCastle,因爲我被卡住了,但它沒有改變任何事情。
我也試過PKCS7Padding
和NoPadding
但沒有運氣。
我發現的常見問題是使用了錯誤的填充behing,或者加密的數據未被正確編碼/加載。
由於我沒有完全按照這個例子做,我想答案是第二個解決方案:我嘗試加載文件,如示例中,但我有這個例外java.nio.charset.MalformedInputException: Input length = 1
,無論如何,我不能使用功能從JDK 1.7。
我在做什麼錯?
爲了儘快提供更好的幫助,請將您的代碼發佈爲演示您的問題的[SSCCE](http://www.sscce.org)。這允許用戶複製/粘貼並重現您的問題。 –