您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java AES / GCM / NoPadding-cipher.getIV()给我什么?

Java AES / GCM / NoPadding-cipher.getIV()给我什么?

是的,至少是针对Oracle提供的实施。它使用SecureRandom实现单独生成。由于它的大小为12个字节(GCM的认值),因此您具有96位的随机性。计数器重复的机会很小。您可以在Oracle JDK所基于的OpenJDK(GPL版)中查找源。

但是,我仍然建议您生成自己的12个随机字节,因为其他提供程序的行为可能有所不同。

这很有可能是因为它是GCM的认值,但其他长度对于GCM 有效。但是,对于12字节以外的任何其他大小,该算法将不得不执行其他计算。由于弱点,强烈建议将其保留为12字节/ 96位,并且API可能会限制您选择IV大小

不可以,它的字节大小可以从64位到128位以8位为增量的任意大小。如果较小,则仅由身份验证标签的最左侧字节组成。您可以将标签的另一个大小GCMParameterSpec用作init呼叫的第三个参数。

请注意,GCM的强度在很大程度上取决于标签的大小。我建议将其保留为128位。最少应包含96位, 特别是 如果您要生成大量密文时。

往上看。对于Oracle提供程序,情况就是如此。使用GCMParameterSpec来确保这一点。

几乎没有限制 ,是的。经过约2 ^ 48次加密后,我将开始担心。通常,您应该 设计 密钥更改。

请参阅问题5的答案

不,完全没有帮助。GCM在下面使用CTR模式,因此只需使用密钥流进行加密即可。它 不会 充当IV。如果您需要几乎无数个密文(高于2 ^ 48!),那么我建议您使用该随机数和密钥作为密钥派生函数或KDF。HKDF目前是最好的,但您可能需要使用Bouncy Castle或自己实施。

java 2022/1/1 18:20:28 有608人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶