如何解决具有任意标签长度的 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);
我遇到了这个错误:
java.security.InvalidAlgorithmParameterException: Unsupported TLen value; must be one of {128,120,112,104,96}
通常,这是一件好事,因为您不希望标签长度为 32。但是,出于我的目的,我确实需要这个标签长度。
有没有办法可以覆盖这些限制以允许任意标签长度?
解决方法
Bouncy Castle 库的创建是为了支持软件中的许多算法,但需要注意的是,如果您真的愿意,它可以让您自己动手。
我可以在标签大小为 32 的情况下运行上述代码:
AND PAYMENT_DATE >= DATEFROMPARTS(YEAR(GETDATE())-1,11,15);
请注意,可以看到错误,例如here。如您所见,这是 provider 中 AES/GCM 的内部实现,而不是例如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();
。您可能已经通过查看完整的堆栈跟踪发现了这一点...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。