Я работал над классным проектом и выяснил некоторые детали трудного пути. Во-первых, Java поддерживает заполнение PKCS7 из коробки, но под другим именем. Это называется PKCS5. Некоторые программисты используют Bouncy Castle из-за ошибочного убеждения, что Java не поддерживает PKCS7, но поддерживает другой (более старый) тип заполнения. Это не должно иметь большого значения, за исключением того, что в Bouncy Castle обнаружились ужасные ошибки. Мой проект опирался на их реализацию AES. Хотя это работает, если вы шифруете все данные одновременно с помощью одного doFinal, блоки шифрования идут ужасно неправильно, и результат даже меняется в зависимости от размера буфера, используемого для передачи данных. Возвращение к реализации Sun дало правильные результаты с тем же кодом. Излишне говорить, что это стоило нам нескольких дней отладки.