Это может произойти из-за как дополнения или преобразования. Если вы не укажете преобразование, по умолчанию ECB будет приниматься как для Java, так и для Android, и это не считается защищенным Fortify.
у меня был тот же вопрос, указав:
final Cipher cipher = Cipher.getInstance("AES");
Fortify перестал жаловаться, когда я изменил его на следующее:
final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Here, вы можете найти список преобразований, которые каждый JVM требуется для поддержки. И here, например, те, которые поддерживаются Android.
Я подозреваю, что полученная вами ошибка связана с тем, что использование GCM требует дополнительных шагов (и если они не предоставлены, шифр может принимать другое преобразование по умолчанию - я не проверял это). Пожалуйста, смотрите следующий отрывок из Java docs:
режимы AEAD, такие как GCM/CCM выполнять все расчеты AAD подлинности перед началом расчетов шифротекста подлинности. Чтобы избежать реализаций, связанных с внутренним буфером зашифрованного текста, все данные AAD должны быть предоставлены в реализации GCM/CCM (с помощью методов updateAAD) до обработки зашифрованного текста (с помощью методов update и doFinal).
Если вы откроете Инструмент Fortify Audit Workbench с результатами вашего анализа, это даст вам дополнительную информацию и понимание вашей проблемы.
Почему вы указываете 'Nopadding'? – Robert
Я пробовал как с «NoPadding», так и с «PKCS5Padding». Но оба они привели к тому же исключению. Я просто использовал одно и то же преобразование шифрования, как упоминалось ссылкой в вопросе. –