最近,我们的应用在Android 8和9的某些设备(三星,华为,Xiaioomi)上崩溃了。
这是堆栈跟踪:
Caused by java.security.InvalidKeyException: RSA private or public key is null
at com.android.org.conscrypt.OpenSSLCipherRSA.engineInitInternal(OpenSSLCipherRSA.java:205)
at com.android.org.conscrypt.OpenSSLCipherRSA.engineInit(OpenSSLCipherRSA.java:221)
at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2668)
at javax.crypto.Cipher.tryCombinations(Cipher.java:2575)
at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider(Cipher.java:2480)
at javax.crypto.Cipher.chooseProvider(Cipher.java:567)
at javax.crypto.Cipher.init(Cipher.java:831)
at javax.crypto.Cipher.init(Cipher.java:772)
它以前没有崩溃过,在较早的Android版本上也没有发生过。 可能是什么原因?也许是操作系统更新?
这是我们去年使用的代码:
PrivateKey getKeyStoreInstance() {
try {
KeyStore keystore = KeyStore.getInstance("AndroidKeyStore");
keystore.load(null);
return keystore.getKey(KEYPAIR_NAME, null);
} catch (IOException | NoSuchAlgorithmException | CertificateException | KeyStoreException e) {
throw new RuntimeException("Error loading AndroidKeyStore", e);
}
}
答案 0 :(得分:0)
如果您使用Android 9作为Compile版本,则必须注意有关Android ID的更改。
ANDROID_ID
Build.serial
(引入了已更改的新方法)因此,如果您的代码中使用了上面的ID来对移动指纹进行一些uniq组合,那么您应该对编码进行更改。