gpt4 book ai didi

android - 如何将openssl生成的RSA私钥导入AndroidKeyStore

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:49 25 4
gpt4 key购买 nike

我想将 key 导入到 AndroidKeyStore 中。所以,我可以通过以下方式通过 openssl 生成它

openssl rsa -text -in privateKey2048.pem

openssl pkcs8 -topk8 -inform PEM -in ./privateKey2048.pem -outform DER -out private2048.der -nocrypt

然后我可以将它从 private2048.der 转换成十六进制格式,这可以在 android 应用程序的 byteArray 中转换。但是我不清楚,如何将这个 byteArray 导入到 AndroidKeyStore 中?

所以一般来说,我的问题是如何导入以字符串或字节数组形式存在的 KeyStore key ?

ps:我知道可以通过 keyPairGenerator.generateKeyPair() 生成 key 对,但我想导入我的 key ,例如由 openssl 生成,然后在应用程序中硬编码。

最佳答案

将私钥硬编码到您的应用程序中并不是一个好主意。 此 key 已泄露,因为您的 APK 内容不是 secret 的,因此可以从 APK 中提取 key 。尽管有此警告,如果您仍然认为需要这样做,请继续阅读。

要将私钥导入到 Android Keystore 中,您需要将其表示为一个 PrivateKey 实例,然后您还需要一个 X.509 证书(对于与私钥对应的公钥)表示为一个 X509Certificate 实例。这是因为 JCA KeyStore 抽象不支持在没有证书的情况下存储私钥。

将 PKCS#8 DER 编码的私钥转换为私钥:

PrivateKey privateKey =
KeyFactory.getInstance("RSA").generatePrivate(
new PKCS8EncodedKeySpec(privateKeyPkcs8));

将 PEM 或 DER 编码证书转换为证书:

Certificate cert =
CertificateFactory.getInstance("X.509").generateCertificate(
new ByteArrayInputStream(pemOrDerEncodedCert));

最后,将私钥和证书导入到 Android Keystore 的“myKeyAlias”条目中:

KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
ks.setKeyEntry("myKeyAlias", privateKey, null, new Certificate[] {cert});

https://developer.android.com/reference/android/security/keystore/KeyProtection.html 查看更多高级示例.

关于android - 如何将openssl生成的RSA私钥导入AndroidKeyStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36794576/

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