如何使用Android存储中的私钥

Vse*_*lod 9 java eclipse android bouncycastle jce

我正在尝试使用下一代码从Android系统存储中导入私钥:

PrivateKey privateKey = KeyChain.getPrivateKey(activity, alias);
Run Code Online (Sandbox Code Playgroud)

其中alias使用检索KeyChain.choosePrivateKeyAlias()方法.KeyChain.getPrivateKey不返回null但PrivateKey对象包含错误的键(所有重要字段都是null).我认为密钥不可导出,并尝试在下一个代码中使用它:

Cipher rsa;
rsa = Cipher.getInstance("RSA");
rsa.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] enc = rsa.doFinal(str.getBytes());
Run Code Online (Sandbox Code Playgroud)

但得到了来自BouncyCastle内部的NullPointerException.

带有密钥的证书是使用来自存储卡功能的Android标准负载从 PFX文件导入的.

我做错了什么?

UPD:我试过用不同的RSA证书做同样的事情,结果是一样的:(

JFr*_*man 0

尝试以下对我来说非常有效的代码:

KeyStore ks;
ks = KeyStore.getInstance("AndroidCAStore");
ks.load(null, null);
keyChain = KeyChain.getCertificateChain(ctx, certificateAlias);
privateKey = KeyChain.getPrivateKey(ctx, certificateAlias);
Run Code Online (Sandbox Code Playgroud)