【Android】AES解密抛出异常Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH

Java使用AES加密的时候没得问题,但是在解密的时候就出错了,一起来找找原因吧。

首先,Java运行的代码如下,使用AES加解密

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

主要问题

可调试运行控制台抛出异常:

Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH

❓看不懂英文?借助翻译工具吧

仔细看看,加密的结果字符串长度,没看出问题吧

SkBJS7W4VaQDCaHJdY97eeaZ6HdTJEyf2n9k/ovIECc=

再想办法,绕绕头,掉了几根头发后…

借助阅读工具看到,会发现多了一个容易忽略的换行符

SkBJS7W4VaQDCaHJdY97eeaZ6HdTJEyf2n9k/ovIECc=\n

没想到真的是跟长度有关,复制的时候没有把换行符一起带上

其它问题

报错1

Wrong IV length: must be 16 bytes long
表示用于VI加解密的密钥字符串长度必须是16位

尝试填充字符串

报错2

IV not used in ECB mode
表示用于VI加解密不要使用ECB模式

尝试改成

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

再不看懂英文就Out了

【Android】AES解密抛出异常Cipher functions:OPENSSL_internal:WRONG_FINAL_BLOCK_LENGTH_第1张图片

你可能感兴趣的:(Android,android,java,AES,加解密,Cipher)