Я использую SecretKey для шифрования конфиденциальных данных в моем приложении. В настоящее время я храню свой SecretKey в кодированном формате Base64 в DB или SharedPrefs, который не является безопасным местом для хранения Secret на корневом телефоне. Следовательно, я хочу переместить свой SecretKey в Android KeyStore. Проблема, с которой я столкнулся, - это когда я пытаюсь этот пример кода от Google, он ожидает PrivateKey вместо SecretKey. Я не мог найти способ сохранить свой SecretKey в KeyStore и получить его для последующего использования. Я пробовал это:
private static void writeSecretKeyToKeystore(SecretKey secretKey, Context context) {
KeyStore keyStore = null;
try {
keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);
keyStore.setKeyEntry("Key", secretKeyEntry.getSecretKey().getEncoded(), null);
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Когда я пытаюсь выполнить код выше, он генерирует исключение Operation not supported because encoding is unknown
.
Любой образец кода будет очень полезен.