Когда я регистрирую первый и единственный отпечаток пальца и генерирую KeyPair
, PrivateKey
становится недействительным, когда я использую его во второй раз. Это происходит только один раз. У меня одного такая проблема? Что-то не так с моим кодом?
Я не могу использовать никакой другой ключ, так как я использую PrivateKey
для подписи данных.
Шаги:
- Стереть все отпечатки пальцев
- Зарегистрировать один отпечаток пальца
- Создайте
KeyPair
и используйтеFingerprintManager :: authenticate
- При следующем использовании
FingerprintManager :: authenticate PrivateKey
навсегда становится недействительным. Это происходит только в первый раз
Ниже кода, где я генерирую KeyPair
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keystore.load(null);
KeyPairGenerator generator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");
generator.initialize(new KeyGenParameterSpec.Builder("key_name", KeyProperties.PURPOSE_SIGN)
.setDigests(digest) // I have defined digest before
.setSignaturePaddings(paddings) // I have defined paddings before
.setUserAuthenticationRequired(true)
.build());
generator.generateKeyPair();
А вот код, в котором я вызываю аутентификацию по отпечатку пальца для подписи данных:
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Signature signature = Signature.getInstance("signing_algorithm");
PrivateKey privateKey = (PrivateKey) keyStore.getKey("key_name", null);
signature.initSign(privateKey); // Here I get KeyPermanentlyInvalidatedException
CryptoObject crypto = new CryptoObject(signature);
FingerprintManager fingerprintManager = context.getSystemService(FingerprintManager.class);
CancellationSignal cancellationSignal = new CancellationSignal();
AuthenticationCallback authenticationCallback = new AuthenticationCallback() {
...
};
fingerprintManager.authenticate(crypto, cancelationSignal, 0, authenticationCallback, null);
PrivateKey
, следовательно, не могу использоватьSecretKey
. - person Toochka   schedule 25.11.2016