RSA私钥为空

时间:2018-11-28 09:57:22

标签: android android-keystore

最近,我们的应用在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);
    }
}

1 个答案:

答案 0 :(得分:0)

如果您使用Android 9作为Compile版本,则必须注意有关Android ID的更改。

  1. ANDROID_ID
  2. Build.serial(引入了已更改的新方法)

因此,如果您的代码中使用了上面的ID来对移动指纹进行一些uniq组合,那么您应该对编码进行更改。