/** * key are 16 bytes, with 16 bytes-zero iv */ public static Encryptor create(final byte[] key) { final byte[] iv = new byte[KEY_LENGTH]; Arrays.fill(iv, (byte) 0x00); return create(key, iv); }
final byte[] cipherText = Encryptor.create(secretKey, randomIV).encrypt(payload);
@Test public void decrypt() throws Exception { final byte[] bytes = new byte[100]; final SecureRandom secureRandom = new SecureRandom(); for (int i = 0; i < 100; i++) { final byte[] keys = new byte[16]; secureRandom.nextBytes(keys); secureRandom.nextBytes(bytes); final byte[] actual = Decryptor.create(keys).decrypt(Encryptor.create(keys).encrypt(bytes)); assertTrue(Arrays.equals(actual, bytes)); } }
@Test public void ivPerformance() throws Exception { final byte[] bytes = new byte[1000]; final SecureRandom secureRandom = new SecureRandom(); final byte[] keys = new byte[16]; final byte[] iv = new byte[16]; secureRandom.nextBytes(keys); secureRandom.nextBytes(iv); final Decryptor decryptor = Decryptor.create(keys, iv); final Encryptor encryptor = Encryptor.create(keys, iv); for (int i = 0; i < 1000; i++) { secureRandom.nextBytes(bytes); final byte[] actual = decryptor.decrypt(encryptor.encrypt(bytes)); assertTrue(Arrays.equals(actual, bytes)); secureRandom.nextBytes(iv); encryptor.resetIvParameter(iv, 0); decryptor.resetIvParameter(iv, 0); } }