2016-02-29 2 views
0

Я пытаюсь расшифровать массив байтов, используя следующий код. Я ушел из обработки исключений и другие методы для краткости: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); 

Он отлично работает. Результат такой, как ожидалось.

Может кто-нибудь, пожалуйста, помогите мне понять, в чем разница, и как я могу сделать работу в режиме реального времени? Пожалуйста, дайте мне знать, если требуется дополнительная информация.

ответ

1

Вы не показываете шифрование, лучше всего то, что действительно заполнение неверно. Чтобы проверить этот дешифровать без PKCS7Padding, и вы сможете увидеть отступы и определить, правильно ли это.

Ошибка отображается в doFinal, потому что это место, где исправление проверяется и удаляется, если это правильно.

ли это, и положить он дамп расшифрованных данных (шестигранник, так как заполнение будет байт в диапазоне 0x01 -.. 0x10

+0

Дело было лишь некоторые из них имели отступы Так что, когда я переехал в NoPadding и обработал его вручную все работало как раз fine.Thanks !!! – user181218

Смежные вопросы