gpt4 book ai didi

android - 在 AndroidKeystore 中保存和检索 key 对

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:55 32 4
gpt4 key购买 nike

我需要生成一个 RSA 2048 key 对,然后保存它,如果存在则恢复它。

此刻,我有这个:

SecureRandom random = new SecureRandom();
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(keySize, RSAKeyGenParameterSpec.F4);
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "SC");
generator.initialize(spec, random);
return generator.generateKeyPair();

这很完美,但现在我试图保存并从 Android Keystore 中获取它,但我没有实现。我试过了:

String alias = "TESTINGKEY";
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
if (!keyStore.containsAlias(alias)) {
SecureRandom random = new SecureRandom();
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(keySize, RSAKeyGenParameterSpec.F4);
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "SC");
generator.initialize(spec, random);
return generator.generateKeyPair();
} else {
Key key = keyStore.getKey(alias, null);
if (key instanceof PrivateKey) {
Certificate cert = keyStore.getCertificate(alias);
return new KeyPair(cert.getPublicKey(), (PrivateKey) key);
} else {
return null;
}
}

但不能正常工作,因为在应用程序的第二次运行时, keystore 不包含 key 对。

https://developer.android.com/training/articles/keystore.html?hl=es我看到构建器 KeyGenParameterSpec 有一个“别名”值,但 RSAKeyGenParameterSpec 没有。

如何保存?

最佳答案

AndroidKeyStore 需要使用 KeyGenParameterSpec.Builder 来生成 key 。还可以使用 AndroidKeyStore 而不是 SC。您可以使用以下代码

生成 key (Android>=23)

KeyPairGenerator kpg = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");

kpg.initialize(new KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
.setKeySize(keySize)
.build());

KeyPair keyPair = kpg.generateKeyPair();

加载 key

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.Entry entry = keyStore.getEntry(alias, null);
PrivateKey privateKey = ((KeyStore.PrivateKeyEntry) entry).getPrivateKey();
PublicKey publicKey = keyStore.getCertificate(alias).getPublicKey();

关于android - 在 AndroidKeystore 中保存和检索 key 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42110123/

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