#android #encryption #android-keystore #secret-key
#Android #шифрование #android-хранилище ключей #секретный ключ
Вопрос:
Согласно этому образцу, я пытаюсь получить SecretKey
из AndroidKeyStore
:
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
SecretKey secretKey = (SecretKey) keyStore.getKey(KEY_NAME, null);
Но я получаю это исключение:
android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to javax.crypto.SecretKey
Вот как я создал ключ:
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context)
.setAlias(KEY_NAME)
.setSubject(new X500Principal("CN=" KEY_NAME))
.setSerialNumber(BigInteger.valueOf(1337))
.setStartDate(START_TIME)
.setEndDate(END_TIME)
.build();
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
kpGenerator.generateKeyPair();
Так есть ли какой-нибудь способ сгенерировать SecretKey
из AndroidKeyStore
?
Комментарии:
1.
SecretKey
используется для симметричных ключей, а не для асимметричных ключей.2. @LukePark как я могу сгенерировать симметричный ключ, используя
AndroidKeyStore
?
Ответ №1:
Начиная с Android 6.0, вы можете генерировать ключи AES с помощью AndroidKeyStore:
KeyGenerator kg = KeyGenerator.getInstance("AES", "AndroidKeyStore");
kg.init(keySpec);
SecretKey key = kg.generateKey();
Для получения более подробной информации см. Сообщение в блоге о редизайне хранилища ключей в Android M (автор Николай Еленков).