6
votes

I am using a AES cipher with a 16 byte block size.

If I try and encrypt a 16 byte string I have no problems, but any other length not a multiple of 16 is throwing an exception.

I know with 3-DES you can specify a padding type as part of the algorithm and it's handled with no extra work (e.g. DES/CBC/PKCS5Padding), but is there a way to specify this with AES?

Or do I need to pad the pytes manually to a multiple of 16, and then strip them when I decrypt? Here is an abbreviated code sample.

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

Any and all replies appreciated!

Thanks in advance, Ciarán

1
pedantic comment: AES only has a 16 byte blocksize, by definition. Rijndael (the original name and specification) had blocksizes of 16,24 and 32 bytes, but for use in AES only 16 byte blocks are allowed. Rijndael also supported keysizes 128, 160, 192, 224, 256, but only 128, 192 and 256 are supported in AES.Henno Brandsma

1 Answers

5
votes

It should work exactly the same with AES, i.e. the padding mode has to be specified together with the cipher. Which padding modes are implemented depends on the provider and should be described in its documentation.

According to the JCE documentation: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA standard padding modes like PKCS5Padding should be always supported (at least, that's how I interpret it).