gpt4 book ai didi

java - AES 128 解密中的预期 IV 长度 0 错误

转载 作者:行者123 更新时间:2023-12-01 18:13:36 26 4
gpt4 key购买 nike

我知道人们问了很多这样的问题。但就我而言,错误是:

java.security.InvalidAlgorithmParameterException: expected IV length of 0

我正在尝试 AES 128 CBC 模式

代码:

byte[] iv = new byte[]{(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00};

IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] decryptedBytes = cipher.doFinal(encrypted);
return decryptedBytes;

如果我将初始化 vector 更改为错误建议的类似内容:

byte[] iv = new byte[]{};

我收到错误:

java.security.InvalidAlgorithmParameterException: expected IV length of 16

最佳答案

对于 CBC 模式,您应该调用

 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

NoPadding 选项表示不应用填充。这在以下情况下很有用

  • 您的数据始终是 AES block 大小的倍数,即 128k
  • 您将进行填充,可能会开发一个新的。

如果您谈论的是 ECB 模式,则不需要 IV 并且不使用 ECB。这是不安全的。如果您确实需要,请在不使用 IV 的情况下调用它。

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

如果您的 Android 目标匹配更喜欢 GCM 模式而不是 ECB 或 CBC。那是一种现代的加密方式;经过身份验证的加密(带有关联数据)。您将获得保密性、身份验证和完整性。

关于java - AES 128 解密中的预期 IV 长度 0 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60417714/

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