The following example encrypts and decrypts a byte array with the AES in CFB mode. See the next chapter on padding for instances where the input is not a multiple of the cipher or mode's block size.
IMode mode = ModeFactory.getInstance("CFB", "AES", 16); Map attributes = new HashMap(); // These attributes are defined in gnu.crypto.cipher.IBlockCipher. attributes.put(IMode.KEY_MATERIAL, key_bytes); attributes.put(IMode.CIPHER_BLOCK_SIZE, new Integer(16)); // These attributes are defined in IMode. attributes.put(IMode.STATE, new Integer(IMode.ENCRYPTION)); attributes.put(IMode.IV, iv_bytes); mode.init(attributes); int bs = mode.currentBlockSize(); for (int i = 0; i + bs < pt.length; i += bs) { mode.update(pt, i, ct, i); } mode.reset(); attributes.put(IMode.STATE, new Integer(IMode.DECRYPTION); mode.init(attributes); for (int i = 0; i + bs < ct.length; i += bs) { mode.update(ct, i, cpt, i); }