AES по умолчанию использует шифрование в режиме ECB с PKCS # 7-совместимым режимом заполнения (для всех провайдеров , наблюдаемых до сих пор). Для шифрования в режиме ECB и CBC требуется заполнение, если входное значение не кратно размеру блока, а 16 - это размер блока AES в байтах.
К сожалению, для механизма распаковки может не быть возможности различить заполнение и данные; сами данные могут представлять действительный отступ. Таким образом, для 16 байтов ввода вы получите еще 16 байтов заполнения. Детерминированные режимы заполнения, такие как PKCS # 7 , всегда заполнены с байтами от 1 до [размера блока].
Если вы посмотрите на int output = cipher.getOutputSize(16);
, вы получите 32 байта. Используйте "AES/ECB/NoPadding"
во время дешифрования, чтобы увидеть байты заполнения (например, 4D61617274656E20426F64657765732110101010101010101010101010101010
).
Вам лучше, когда вы полностью укажете алгоритм ("AES/CBC/PKCS5Padding"
используется нормально). В противном случае вы будете продолжать угадывать, какой режим на самом деле используется.
Обратите внимание, что использование режима ECB небезопасно, поскольку злоумышленник может извлечь информацию из зашифрованного текста. Одинаковые блоки простого текста кодируются в идентичные блоки зашифрованного текста.