在“AndroidKeyStore”中使用私钥进行编码()返回空值

ppr*_*dos 5 security android pki

在 Android 4.3 中,此代码返回 null。

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
keyStore.setKeyEntry(alias, privateKey, null, certificateChain);
PrivateKeyEntry entry=(PrivateKeyEntry)keyStore.getEntry(alias, new PasswordProtection(password));
assert(entry.getPrivateKey().getEncoded()!=null);
Run Code Online (Sandbox Code Playgroud)

如何获得私钥的编码版本?

或者,是否可以将私钥处理程序传输到另一个应用程序?

谢谢

小智 5

Android KeyChain API 阻止您获取编码的私钥。

参见OpenSSLRSAPrivateKey.java第158行的方法

@Override
public final BigInteger getPrivateExponent() {
    if (key.isEngineBased()) {
        throw new UnsupportedOperationException("private exponent cannot be extracted");
    }
Run Code Online (Sandbox Code Playgroud)

但使用 KeyChain API 的好处是它提供系统范围的凭证存储。任何应用程序都应该能够通过其别名检索密钥对和证书。请参阅密钥库文档。