1

我使用的Qlassified library和我发现了以下抛出异常在Android 6.0和6.0.1: java.lang.ClassCastException: android.security.keystore.AndroidKeyStoreECPublicKey cannot be cast to java.security.interfaces.RSAPublicKey的Android 6.0密钥库ClassCast异常

具体而言,这种情况发生时,数据被加密的内此代码块:

final KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStoreInstance.getEntry(alias, null); 

final RSAPublicKey publicKey = (RSAPublicKey) privateKeyEntry.getCertificate().getPublicKey(); // error 

byte[] dataBytes = input.getBytes(CHARSET); 
Cipher cipher = Cipher.getInstance(ALGORITHM, ANDROID_MODE); 
cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
return Base64.encodeToString(cipher.doFinal(dataBytes), BASE64_MODE); 

有什么想法?

+0

使用带有RSA公钥的证书? –

回答

1

这来自存储在密钥库上的密钥的生成。您正在使用EC算法。你必须指定如下的RSA算法:

KeyPairGenerator generator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore"); 
        generator.initialize(params); 

我有同样的问题,这解决了它。