9

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

PrivateKey privateKey = KeyChain.getPrivateKey(activity, alias);

wherealias使用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());

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

带有密钥的证书是使用从存储卡功能加载的 Android 标准从 PFX 文件中导入的。

我做错了什么?

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

4

1 回答 1

0

试试下面对我来说完美的代码:

KeyStore ks;
ks = KeyStore.getInstance("AndroidCAStore");
ks.load(null, null);
keyChain = KeyChain.getCertificateChain(ctx, certificateAlias);
privateKey = KeyChain.getPrivateKey(ctx, certificateAlias);
于 2014-05-10T11:23:19.567 回答