gpt4 book ai didi

java - 将 AndroidKeyStoreRSAPrivateKey 转换为 RSAPrivateKey 时崩溃

转载 作者:IT老高 更新时间:2023-10-28 20:45:12 25 4
gpt4 key购买 nike

我正在学习本教程:How to use the Android Keystore to store passwords and other sensitive information .它(松散地)与 Google 示例应用程序相关联: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 的更好方法吗?

非常感谢。

最佳答案

我设法通过从 Cipher.getInstance 中删除 Provider 并将 not 转换为 RSAprivateKey 来实现此功能。

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

Cipher output = Cipher.getInstance("RSA/ECB/PKCS1Padding");
output.init(Cipher.DECRYPT_MODE, privateKeyEntry.getPrivateKey());

我不是 100%,但我认为造成这种情况的原因是棉花糖从 OpenSSL 到 BoringSSL 的变化。 https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client

不管怎样,上面的方法适用于 M 及以下。

关于java - 将 AndroidKeyStoreRSAPrivateKey 转换为 RSAPrivateKey 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com