gpt4 book ai didi

java - 具有任意标签长度的 AES-GCM

转载 作者:行者123 更新时间:2023-12-04 17:17:33 32 4
gpt4 key购买 nike

对于算法测试 vector 评估,我尝试在 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 运行上述代码而不会出现问题:

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();

请注意,可以看到错误,例如 here .如您所见,这是 中 AES/GCM 的内部实现。供应商 , 不是例如 Cipher .您可能已经通过查看完整的堆栈跟踪发现了这一点...

关于java - 具有任意标签长度的 AES-GCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68308827/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com