android rsa加密崩溃,将AndroidKeyStoreRSAPrivateKey转换为RSAPrivateKey时崩溃

我可以使用公钥加密数据,也可以在运行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的更好方法吗?

非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>