Согласен с @rossum, но есть еще кое-что:
Режиму CTR необходим вектор инициализации (IV).Это «счетчик» (это то, к чему относится «CTR»).Если вы можете хранить IV отдельно (его не нужно защищать), это сработает.При расшифровке данных вам понадобится одно и то же значение IV.
Если вы не хотите хранить IV, и вы можете гарантировать, что никакие два значения не будут зашифрованы одним и тем жеключ , можно использовать фиксированный IV (даже массив 0 с).
Выше очень важно, потому что шифрование более одного сообщения с тем же ключом/ IV комбинация разрушает безопасность.См. Раздел Вектор инициализации (IV) в этой статье Википедии: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
Реализация кода CES в AES может быть:
SecretKeySpec skeySpec = new SecretKeySpec(getCryptoKeyByteArray(length=16));
Cipher encryptor = Cipher.getInstance("AES/CTR/NoPadding");
// Initialisation vector:
byte[] iv = new byte[encryptor.getBlockSize()];
SecureRandom.getInstance("SHA1PRNG").nextBytes(iv); // If storing separately
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
encryptor.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);
byte[] encrypted = encryptor.doFinal(plain);