Аварийное приведение AndroidKeyStoreRSAPrivateKey к RSAPrivateKey

Я следую этому уроку:Как использовать Android Keystore для хранения паролей и другой конфиденциальной информации, Он (слабо) связан с приложением Google Sample:BasicAndroidKeyStore.

Я могу зашифровать свои данные с помощью открытого ключа, и я могу расшифровать на устройствах под управлением Lollipop. Однако у меня Nexus 6 работает зефир, и это дает сбой, выдавая ошибку:

java.lang.RuntimeException: Unable to create application com.android.test: java.lang.ClassCastException: android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey

Вот код, на котором он падает:

KeyStore.Entry entry;

//Get Android KeyStore
ks = KeyStore.getInstance(KeystoreHelper.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);

// Weird artifact of Java API.  If you don't have an InputStream to load, you still need to call "load", or it'll crash.
ks.load(null);

// Load the key pair from the Android Key Store
entry = ks.getEntry(mAlias, null);

KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) entry;

//ERROR OCCURS HERE::
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey();

Cipher output = Cipher.getInstance("RSA/ECB/PKCS1Padding", "AndroidOpenSSL");

output.init(Cipher.DECRYPT_MODE, rsaPrivateKey);

Я неохотно объясняю это странностью Android M, так как не вижу причин, по которым изменились бы библиотеки Java-шифрования. Если выйдет релиз M, и наше приложение сразу же выйдет из строя на M, у меня большие проблемы

Я делаю что-то не так? В ошибке совершенно точно сказано, что вы не можете привести к RSAPrivateKey, так кто-нибудь знает лучший способ получить RSAPrivateKey из записи?

Большое большое спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос