fac*_*or2 5 java encryption aes aes-gcm
对于算法测试向量评估,我尝试在 GCM 模式下执行 AES,以使用任意标签长度值(例如 32 位)进行加密和解密。
当我尝试使用任意标签长度初始化密码时,如下所示:
final Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec parameterSpec = new GCMParameterSpec(tagLen, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec);
Run Code Online (Sandbox Code Playgroud)
我遇到了这个错误:
java.security.InvalidAlgorithmParameterException: Unsupported TLen value; must be one of {128, 120, 112, 104, 96}
Run Code Online (Sandbox Code Playgroud)
通常,这将是一件好事,因为您不希望标签长度为 32。但是,出于我的目的,我确实需要此标签长度。
有没有办法可以覆盖这些限制以允许任意标签长度?
Bouncy Castle 库的创建是为了支持软件中的许多算法,但需要注意的是,如果您真的愿意,它会让您搬起石头砸自己的脚。
我可以使用标签大小 32 运行上面的代码,不会出现问题:
Security.addProvider(new BouncyCastleProvider());
SecretKeySpec secretKey = new SecretKeySpec(new byte[16], "AES");
final Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");
GCMParameterSpec parameterSpec = new GCMParameterSpec(32, new byte[16]);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, parameterSpec);
cipher.update("Maarten did it".getBytes(StandardCharsets.UTF_8));
byte[] ct = cipher.doFinal();
Run Code Online (Sandbox Code Playgroud)
请注意,可以在此处看到该错误。正如您所看到的,这是提供商中 AES/GCM 的内部实现,而不是例如Cipher。您可能已经通过查看完整的堆栈跟踪发现了这一点......
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |