Я использую шифр 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, т.е. режим заполнения должен быть указан вместе с шифром. Реализуемые режимы заполнения зависят от поставщика и должны быть описаны в его документации.
Согласно документации JCE: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA стандартные режимы заполнения, такие как PKCS5Padding, должны всегда поддерживаться (по крайней мере, так я это интерпретирую).
Парень, я знаком с этой страницей :) Когда вы говорите провайдер, вы имеете в виду реализацию JCE, которую я использую? Я проверю документацию для этого.
Да, провайдер (второй параметр в методе getInstance ()) в основном реализует интерфейс Cipher. У вас может быть несколько активных поставщиков криптографии. Sun JDK поставляется с предустановленным провайдером SunJCE.
Поскольку я кодировал «доказательство концепции» AES с помощью Java / Coldfusion, я реализовал собственное заполнение, используя метод 2, описанный здесь: di-mgt.com.au/cryptopad.html. Я мог бы присмотреться к настоящему. Я отмечу это как ответ.
педантичный комментарий: AES по определению имеет размер блока всего 16 байт. Rijndael (исходное название и спецификация) имел размер блока 16, 24 и 32 байта, но для использования в AES разрешены только 16-байтовые блоки. Rijndael также поддерживает ключи 128, 160, 192, 224, 256, но только 128, 192 и 256 поддерживаются в AES.