我的任务是使用 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 位数据进行身份验证的说明吗?