**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我有这个片段,不知道为什么我用这个片段得到不规则的结果。
提示:适用于少于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);
1条答案
按热度按时间wvt8vs2t1#
线索:
Input length not multiple of 16 bytes
请注意你已经问过了AES/ECB/NoPadding
密码模式。aes是一种分组密码-对每个块(128位=16字节)的数据进行加密。如果输入不是16字节的倍数,则使用填充将输入长度填充为块大小的倍数。您已指定
NoPadding
参数,则输入必须具有16字节的倍数(与长度超过200个字符无关)。另一个问题是使用欧洲央行模式。请不要使用它,直到真的没有理由。
我有几个例子你可以借鉴。