Я пытаюсь расшифровать массив байтов, используя следующий код. Я ушел из обработки исключений и другие методы для краткости:cipher.doFinal (...) failed while cipher.update (...) успешно
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
byte[] key = getKey(); \\Assume it is implemented.
byte[] iv = getIv(); \\Assume it is implemented;
SecretKeySpec sc = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, sc, new IvParameterSpec(iv));
byte[] encrypted = getBytesFromFile(); \*Assume it is implemented. Simply reads bytes from a binary file into a byte array and returns them as are.*\
byte[] clear = new byte[cipher.getOutputSize(encrypted.length)];
int processed = cipher.doFinal(encrypted, 0, encrypted.length, clear, 0);
Примечание: PKCS7Padding не поддерживается изначально в Java, но я получил его на работу, добавив Securtiy BouncyCastleProvider. Для аргумента PKCS5Padding имеет ту же проблему.
import org.bouncycastle.jce.provider.BouncyCastleProvider;
Проблема:
doFinal бросает бросает BadPaddingException: блок колодки коррумпированной. Однако, если я заменю doFinal с обновления, то есть:
int processed = cipher.update(encrypted, 0, encrypted.length, clear, 0);
Он отлично работает. Результат такой, как ожидалось.
Может кто-нибудь, пожалуйста, помогите мне понять, в чем разница, и как я могу сделать работу в режиме реального времени? Пожалуйста, дайте мне знать, если требуется дополнительная информация.
Дело было лишь некоторые из них имели отступы Так что, когда я переехал в NoPadding и обработал его вручную все работало как раз fine.Thanks !!! – user181218