Java-шифр - проблема заполнения AES - PullRequest
5 голосов
/ 04 декабря 2008

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

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

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

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

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

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

Спасибо заранее, Ciarán

1 Ответ

5 голосов
/ 05 декабря 2008

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

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

...