作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从 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
中,您应该按照以下步骤操作:
PrivateKey
实例现在您可以将 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/
我是一名优秀的程序员,十分优秀!