此问题已从加密堆栈交换迁移,因为它可以在堆栈溢出时得到回答。昨天迁移了。
对于算法测试向量评估,我尝试在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。但是,出于我的目的,我确实需要这个标记长度。
是否有一种方法可以覆盖这些限制以允许任意标记长度?
1条答案
按热度按时间xggvc2p61#
BouncyCastle库是为了支持软件中的许多算法而创建的,其中有一条警告:如果你真的想,它会让你射中自己的脚。
我可以在标签大小为32的情况下运行上述代码,而不会出现问题:
请注意,可以在此处看到错误。如您所见,这是提供程序中aes/gcm的内部实现,而不是。
Cipher
. 通过查看完整的堆栈跟踪,您可能已经发现了这一点。。。