Android 12 适配踩坑之 InvalidParameterException Key size must be either 112 or 168 bits

错误信息
在 Android 12 的设备上,进行加密时提示java.security.InvalidParameterException: Key size must be either 112 or 168 bits


报错原因
在 Android 12 上,移除了 Bouncy Castle 实现,此改动针对所有在 Android 12 上运行的应用,即使你的 targetVersion 不是 31


报错堆栈如下

 java.security.InvalidParameterException: Key size must be either 112 or 168 bits
     at com.android.org.conscrypt.KeyGeneratorImpl$DESEDE.checkKeySize(KeyGeneratorImpl.java:154)
     at com.android.org.conscrypt.KeyGeneratorImpl.engineInit(KeyGeneratorImpl.java:68)
     at javax.crypto.KeyGenerator.init(KeyGenerator.java:589)
     at javax.crypto.KeyGenerator.init(KeyGenerator.java:566)
     at cn.shuhe.foundation.security.Cjj3Des.initSecretKey(Cjj3Des.java:34)
     at cn.shuhe.dmnetwork.network.CjjHttpRequest.buildEncrypt(CjjHttpRequest.java:339)
     at cn.shuhe.dmnetwork.network.CjjHttpRequest.callRestfulServiceEncrypt(CjjHttpRequest.java:238)
     at cn.shuhe.dmnetwork.network.CjjHttpRequest.access$1000(CjjHttpRequest.java:39)
     at cn.shuhe.dmnetwork.network.CjjHttpRequest$3.onError(CjjHttpRequest.java:447)
     at cn.shuhe.dmnetwork.network.CjjHttpCallback.onError(CjjHttpCallback.java:27)
     at cn.shuhe.dmnetwork.okhttp.OkHttpClientManager$3.run(OkHttpClientManager.java:320)
     at android.os.Handler.handleCallback(Handler.java:938)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loopOnce(Looper.java:201)
     at android.os.Looper.loop(Looper.java:288)
     at android.app.ActivityThread.main(ActivityThread.java:7768)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)



KeyGeneratorImpl源码地址,部分代码截图如下

KeyGeneratorImpl#checkKeySize()

可行的解决方式
将加密时的秘钥长度修改为168,经测试可在 Android 12 以及以下版本正常运行。

你可能感兴趣的:(Android 12 适配踩坑之 InvalidParameterException Key size must be either 112 or 168 bits)