【发布时间】:2017-02-08 10:08:34
【问题描述】:
我需要生成一个 RSA 2048 密钥对,然后保存它,如果存在则恢复它。
此刻,我有这个:
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;
}
}
但无法正常工作,因为在应用程序的第二次运行时,密钥库不包含密钥对。
在https://developer.android.com/training/articles/keystore.html?hl=es 中,我看到KeyGenParameterSpec 构建器有一个“别名”值,但RSAKeyGenParameterSpec 没有。
如何保存?
【问题讨论】:
标签: android rsa android-keystore