illegalblocksizeexception:输入长度不是16字节的倍数aes/ecb/nopadding

kninwzqo  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(2394)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我有这个片段,不知道为什么我用这个片段得到不规则的结果。
提示:适用于少于200个字符的短字符串,但是当字符串在260个字符及以上的范围内时,它抛出一个 javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes .

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
      byte[] key = "secret_key".getBytes(StandardCharsets.UTF_8);
      SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
      cipher.init(Cipher.ENCRYPT_MODE, secretKey);
      byte[] cipherText = cipher.doFinal(request.getBytes(StandardCharsets.UTF_8));
      String encryptedText = Base64.encodeBase64String(cipherText);
wvt8vs2t

wvt8vs2t1#

线索: Input length not multiple of 16 bytes 请注意你已经问过了 AES/ECB/NoPadding 密码模式。
aes是一种分组密码-对每个块(128位=16字节)的数据进行加密。如果输入不是16字节的倍数,则使用填充将输入长度填充为块大小的倍数。您已指定 NoPadding 参数,则输入必须具有16字节的倍数(与长度超过200个字符无关)。
另一个问题是使用欧洲央行模式。请不要使用它,直到真的没有理由。
我有几个例子你可以借鉴。

相关问题