Я использую приведенный ниже код, чтобы создать ключ hmac и вернуть его в виде строки.Хранение ключа hmac в хранилище ключей Android
KeyGenerator keyGen = null;
try {
keyGen = KeyGenerator.getInstance("HmacSHA256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
SecretKey key = keyGen.generateKey();
byte[] encoded = key.getEncoded();
String s=Base64.encodeToString(encoded, Base64.DEFAULT);
Log.i("Hmac key before encrypt",s);
try {
KeyStore keystore = KeyStore.getInstance("AndroidKeyStore");
keystore.load(null, null);
KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keystore.getEntry("temp", null);
RSAPublicKey publicKey = (RSAPublicKey) privateKeyEntry.getCertificate().getPublicKey();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherBytes = cipher.doFinal(encoded);
return Base64.encodeToString(cipherBytes,Base64.DEFAULT);
} catch (UnrecoverableEntryException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Как сохранить это в хранилище андроидов ?. Я попытался с помощью код ниже:
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.ProtectionParameter param = new KeyStore.PasswordProtection("test".toCharArray());
keyStore.setEntry("key1",hmacKey,param);
Я не получить ошибки, независимо от того, какой формат hmacKey в: String/Bytes или javax.crypto.SecretKey
. Ниже приведены ошибки: В случае прохождения ключа hmacKey
:
Wrong 2nd argument type. Found: 'java.security.Key', required: 'java.security.KeyStore.Entry'
же в тех случаях, когда я передать строку или массив байтов.
Если я задаю параметр java.security.KeyStore.Entry
, он все равно не работает.
Правильно ли это? Может ли кто-нибудь указать, как ключ HMAC можно сохранить в хранилище ключей, используя псевдоним. Как преобразовать ключ hmack в формат java.security.KeyStore.Entry
?
Извините за неоднозначной. Отредактировал вопрос – Sid
Не можете ли вы просто сохранить «ключ», как сгенерировано выше? Я вижу много пуха в вопросе. Это не похоже на MCSE. –
Нет, он не может быть сохранен как таковой. В настоящее время я использую общие настройки для хранения этого ключа. Не уверен, есть ли там аспект безопасности, поэтому я хотел сохранить его в хранилище ключей. Первая часть кода работает абсолютно нормально, и я могу создать ключ hmack, а также вернуть его. Его часть, где я пытаюсь сохранить его в хранилище ключей Android, с псевдонимом, который вызывает проблему. – Sid