gpt4 book ai didi

security - Android KeyStore - 如何保存 RSA 私钥

转载 作者:行者123 更新时间:2023-12-02 19:04:52 30 4
gpt4 key购买 nike

我从 Web 服务(我自己制作)收到一个以 Base 64 字符串编码的 RSA 私钥 PKCS#8。我的 Android 应用程序必须将此 key 安全地保存到手机中的某个位置。

从 Android 4.3 版本开始,可以使用新的 KeyStore API 保存 key 。我找到了article with code axample显示如何使用存储 key 所需的规范生成 key 对。然后恢复 key 。

// generate a key pair
Context ctx = getContext();
Calendar notBefore = Calendar.getInstance()
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx)
.setAlias("key1")
.setSubject(
new X500Principal(String.format("CN=%s, OU=%s", alais,
ctx.getPackageName())))
.setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime())
.setEndDate(notAfter.getTime()).build();

KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
KeyPair kp = kpGenerator.generateKeyPair();

// in another part of the app, access the keys
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("key1", null);
RSAPublicKey pubKey = (RSAPublicKey)keyEntry.getCertificate().getPublicKey();
RSAPrivateKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey();

但我不明白如何保存现有的 key 。有谁能够帮助我?提前致谢

最佳答案

KeyStore中,私钥必须与证书(甚至是假的自签名证书)一起存储。要将 key 存储在 AndroidKeyStore 中,您应该按照以下步骤操作:

  1. 解码 Base64 PKCS#8 以获取 PrivateKey 实例
  2. 网络服务发送证书(或证书链)以及私钥,或者 PKCS#8 blob 也包含公钥。
  3. 如果需要,您需要为私钥生成证书。 BouncyCastle库可以做到这一点(可以找到代码示例 here )。

现在您可以将 key 添加到 keystore 中。

PrivateKey myKey = getKey();
X509Certificate certificate = getCertificate();
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
keystore.setKeyEntry("anAlias", myKey, null, new Certificate[] { certificate });

关于security - Android KeyStore - 如何保存 RSA 私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20129130/

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