Я пытаюсь сгенерировать ключ на основе кода биометрических данных / пароля устройства для пользователей Android, чтобы потом использовать его для защиты конфиденциальной информации. У меня есть следующий код:
KeyGenerator kg = KeyGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_AES,
"AndroidKeyStore"
);
KeyGenParameterSpec.Builder kgps = new KeyGenParameterSpec.Builder(
"myDeviceKey",
(KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
);
kgps.setBlockModes(KeyProperties.BLOCK_MODE_GCM);
kgps.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE);
kgps.setKeySize(256);
kgps.setUserAuthenticationRequired(true);
if (Build.VERSION.SDK_INT >= 24) {
kgps.setInvalidatedByBiometricEnrollment(false);
}
kgps.setUserAuthenticationValidityDurationSeconds(120);
kg.init(kgps.build());
SecretKey secret = kg.generateKey();
byte[] x = secret.getEncoded();
Моя проблема в том, что когда я пытаюсь получить зашифрованную версию секрета, он возвращает ноль. Есть ли у кого-нибудь понимание того, что я могу здесь делать неправильно?