Java Cipher - проблема с заполнением AES

Я использую шифр AES с размером блока 16 байт.

Если я попытаюсь зашифровать 16-байтовую строку, у меня не возникнет проблем, но любая другая длина, не кратная 16, вызывает исключение.

Я знаю, что с 3-DES вы можете указать тип заполнения как часть алгоритма, и он обрабатывается без дополнительной работы (например, DES / CBC / PKCS5Padding), но есть ли способ указать это с помощью AES?

Или мне нужно вручную дополнить pytes до числа, кратного 16, а затем удалить их при расшифровке? Вот сокращенный пример кода.

encrypt = Cipher.getInstance("AES", provider);
encrypt.init(Cipher.ENCRYPT_MODE, key) ;
byte[] encrypted = encrypt.doFinal(plainTxt.getBytes()) ;

Любые и все ответы приветствуются!

Заранее спасибо, Чиаран

педантичный комментарий: AES по определению имеет размер блока всего 16 байт. Rijndael (исходное название и спецификация) имел размер блока 16, 24 и 32 байта, но для использования в AES разрешены только 16-байтовые блоки. Rijndael также поддерживает ключи 128, 160, 192, 224, 256, но только 128, 192 и 256 поддерживаются в AES.

Henno Brandsma 06.02.2011 12:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
1
22 875
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Он должен работать точно так же с AES, т.е. режим заполнения должен быть указан вместе с шифром. Реализуемые режимы заполнения зависят от поставщика и должны быть описаны в его документации.

Согласно документации JCE: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA стандартные режимы заполнения, такие как PKCS5Padding, должны всегда поддерживаться (по крайней мере, так я это интерпретирую).

Парень, я знаком с этой страницей :) Когда вы говорите провайдер, вы имеете в виду реализацию JCE, которую я использую? Я проверю документацию для этого.

Ciaran Archer 05.12.2008 11:02

Да, провайдер (второй параметр в методе getInstance ()) в основном реализует интерфейс Cipher. У вас может быть несколько активных поставщиков криптографии. Sun JDK поставляется с предустановленным провайдером SunJCE.

Michael Borgwardt 05.12.2008 12:56

Поскольку я кодировал «доказательство концепции» AES с помощью Java / Coldfusion, я реализовал собственное заполнение, используя метод 2, описанный здесь: di-mgt.com.au/cryptopad.html. Я мог бы присмотреться к настоящему. Я отмечу это как ответ.

Ciaran Archer 05.12.2008 19:03

Другие вопросы по теме