Мне нужно сгенерировать RSA 2018 Keypair, а затем сохранить его и восстановить, если он существует.Сохранить и восстановить KeyPair в AndroidKeystore
На данный момент у меня есть это:
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 хранилища ключей, но я не его достижения. Я судимое:
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;
}
}
Но не работает правильно, потому что на втором запуске приложения, хранилища ключей не содержит KeyPair.
В https://developer.android.com/training/articles/keystore.html?hl=es Я видел, что KeyGenParameterSpec
, у строителя есть значение «alias», но int RSAKeyGenParameterSpec
нет.
Как его сохранить?
Я попробовал то, что вы размещаете @pedrofb, но сейчас, когда я пытаюсь использовать keypair.getPrivateKey(). getEncoded(), запускает исключение nullPointerException, потому что этот getEnconded() имеет «ничего» внутри. – Shudy
Ключевой материал ключей, хранящихся в Keystore Android, недоступен. Вы можете использовать клавиши, но вы не можете их извлечь. Это ограничение безопасности – pedrofb
@ Сьюди - мой ответ ясен? Если вам нужно извлечь содержимое секретного ключа, вы не сможете использовать 'AndroidKeyStore', но можете использовать его отлично, и это рекомендуется для обеспечения безопасности. Извлечение закрытого ключа для хранения в файле означает, что вам понадобятся дополнительные меры безопасности – pedrofb