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的构建器具有“alias”值,但在RSAKeyGenParameterSpec中没有。
我该如何保存它?
byte publickey[] = keyStore.getCertificate(alias).getPublicKey().getEncoded();访问。您需要将其转换为base64格式,以便将其作为字符串发送到服务器。 - pedrofbkpg.generateKeyPair()方法是否也会将生成的密钥存储到alias名称下的"AndroidKeyStore"中,还是需要使用其他方法来存储密钥?如果需要,应该如何操作?请给予建议。 - Ωmegaalias恢复(无法提取私钥)。 - pedrofb