gpt4 book ai didi

java - 得到了 org.bouncycaSTLe.jcajce.provider.symmetry.util.BaseBlockCipher$1 : nonce must have length from 7 to 13 octets while decrypt bytes

转载 作者:行者123 更新时间:2023-11-30 06:57:55 25 4
gpt4 key购买 nike

这是我的代码,用于解密一些 Base64 编码的字符串(或者它的字节数组,是的):

IvParameterSpec ivParameterSpec = new IvParameterSpec("randombigrandom".getBytes("UTF-8"));
bytes = key.getBytes("UTF-8");
keySpec = new SecretKeySpec(bytes, "AES");
cipher = Cipher.getInstance("AES/CCM/NOPADDING", new BouncyCastleProvider());
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParameterSpec);
ret = ByteBuffer.wrap(cipher.doFinal(Base64Utils.decode(requestBody.getEncryptedData().getBytes())));

我使用 AES/CCM,因为我们使用默认使用 AES/CCM 的 BLE(低功耗蓝牙)设备。我有一个异常(exception):

org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$1: nonce must have length from 7 to 13 octets
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineInit(Unknown Source)

有什么想法如何设置该随机数吗?

最佳答案

根据IETF RFC 3610 -- Counter with CBC-MAC (CCM) ,随机数 N 的长度必须为 15 - L 八位字节,其中 L 的范围为 2 - 8 八位字节。 L 的建议值为 8,因为消息长度 l(m)0 <= l(m) 限制< 2^(8L),因此当 L = 8 时,最大消息长度为 2^64 - 1

您为 IvParameterSpec 提供的值是 randombigrandom,即 15 字节。根据为您的消息选择的长度,该值必须介于 7 (15 - 8) 和 13 (15 - 2 )八位字节。

当您从外部源接收加密数据时,随机数应伴随每条加密消息(随机数不必加密或保密,只需每条消息唯一且不可预测)。您应该在收到消息时使用提供的随机数填充 IvParameterSpec (阅读您的设备的规范以了解它如何序列化消息 - 它可能是您的请求正文中的单独字段,或者您可能需要按字节边界分割加密数据字段)。

应该明确指出,您必须为使用相同 key 加密的每条消息使用唯一的随机数值。否则会破坏此模式的安全属性 (作者的话)。使用没有计数器的静态随机数可以保证您发送的任何消息都将被轻易破坏。

关于java - 得到了 org.bouncycaSTLe.jcajce.provider.symmetry.util.BaseBlockCipher$1 : nonce must have length from 7 to 13 octets while decrypt bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41461525/

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