Java使用AES加密的时候没得问题,但是在解密的时候就出错了,一起来找找原因吧。
首先,Java运行的代码如下,使用AES加解密
Cipher cipher = Cipher.getInstance("AES/CBC/NOPadding");
//...
可调试运行控制台抛出异常:
Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH
❓看不懂英文?借助翻译工具吧
仔细看看,加密的结果字符串长度,没看出问题吧
SkBJS7W4VaQDCaHJdY97eeaZ6HdTJEyf2n9k/ovIECc=
再想办法,绕绕头,掉了几根头发后…
借助阅读工具看到,会发现多了一个容易忽略的换行符
SkBJS7W4VaQDCaHJdY97eeaZ6HdTJEyf2n9k/ovIECc=
\n
没想到真的是跟长度有关,复制的时候没有把换行符一起带上
Wrong IV length: must be 16 bytes long
表示用于VI
加解密的密钥字符串长度必须是16位
尝试填充字符串
IV not used in ECB mode
表示用于VI
加解密不要使用ECB
模式
尝试改成
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
再不看懂英文就Out了