当前位置: 首页 > 知识库问答 >
问题:

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

史骏
2023-03-14

我想向AndroidKeyStore导入一个密钥。所以,我可以通过openssl以以下方式生成它

openssl rsa-text-in privateKey2048。佩姆

openssl pkcs8-topk8-通知PEM-in/私钥2048。pem-出口-出口私家车2048。德诺克里普特酒店

然后我可以把它从private2048.der转换成十六进制格式,可以在Android应用程序中的byteArray中转换。但我不清楚,如何将此byteArray导入Android KeyStore?

所以在一般情况下,我的问题是如何导入到KeyStore密钥作为字符串或字节数组存在?

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

共有1个答案

斜烈
2023-03-14

将私钥硬编码到应用程序中不是一个好主意。此密钥被泄露,因为APK的内容不是秘密的,因此密钥可以从APK中提取。如果你仍然相信你需要这样做,尽管有这个警告,继续读下去。

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

要将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密钥库的“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.

 类似资料:
  • 主要的问题是,我对C相当陌生,OpenSSL留档对我来说不够清晰,我尝试过使用读和写rsa键到C中的pem文件,但我不太明白。例如,函数如何创建私有和公共?而从何而来?pcszPassphrase的意义是什么? 我会解释,好像这是某种伪代码,这就是我想做的,粗体部分是我不知道如何做的: 生成私钥和公钥作为十六进制缓冲区(客户端) 基本上,我知道如何处理AES加密/解密和通信协议,反正他们已经实现了

  • 我知道可以使用此链接为OpenSSL中的自签名证书生成一个公钥和一个私钥。但是对于给定的公钥,我有没有可能算出对应的私钥呢?我一直在使用1024位的RSA公钥。

  • 让我先解释一下我的问题。我从CA购买了一个证书,并使用以下格式生成csr和私钥: 有趣的是,在aws文档页面上,他们显示的示例私钥以“------开始RSA私钥-------”开头 有没有办法使用OpenSSL将我的私钥转换为RSA私钥?

  • 我正在Erlang中创建一个应用程序,给定一个RSA私钥,它可以返回RSA公钥和与该priv密钥相关联的x509公钥。 ----只是一个更新---- 在花了一些时间了解x509并阅读了Erlang public_key文档后,我找到了一个解决方案: 如果我可以通过简单地获取模数和publicExponent,从“RSaprivateKey”生成“RSapublicKey”,那么生成这两个键的代码如

  • 我正在尝试使用OpenSSL命令行界面创建基于椭圆曲线的证书。我正在通过在 CLI 中键入以下命令来生成密钥文件: 问题是尽管ECC密钥被成功地生成,但它没有用任何对称密码加密。但是,使用下面的命令加密RSA密钥非常简单: 是否像 RSA 密钥一样加密 ECC 密钥? 我尝试了“OpenSSL 0.9.8zh 2016年1月14日”和“OpenSSL 1.1.0g 2017年11月2日”多参数组合

  • 我使用我编写的程序生成了一个 PKCS#1 RSA 密钥对。我已经输出公钥作为 ASN.1数据结构的DER编码。 然而,当我试图在OpenSSL 和< code>rsautl命令中使用它时,OpenSSL说 我尝试过DER和PEM格式。 是否有额外的编码和/或数据结构需要我申请才能在OpenSSL中使用? 这是我的命令行: PEM 格式的公钥数据结构