Моя задача — использовать специальную функцию AES/GCM для аутентификации части A и шифрования части B одного блока данных. У меня проблемы с реализацией решения с использованием Java-8.
В следующем примере используется блок данных размером 256 бит. Только первые 128 бит должны быть аутентифицированы. Следующие 128 бит должны быть зашифрованы. Ожидается, что результирующий тег для комбинированной операции будет 128-битным.
Я считаю, что мне удалось реализовать вариант только с шифрованием, который шифрует оба 128-битных блока данных.
SecureRandom random = new SecureRandom();
byte[] initVector = new BigInteger(96, random).toByteArray();
byte[] data = new BigInteger(255, random).toByteArray();
byte[] key = new BigInteger(255, random).toByteArray();
byte[] encrypted = new byte[data.length];
final Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), new GCMParameterSpec(16 * Byte.SIZE, initVector));
cipher.update(data, 0, data.length, encrypted, 0);
byte[] tag = cipher.doFinal();
Может ли кто-нибудь дать инструкции о том, как изменить код, чтобы аутентифицировать только первые 128 бит данных?