Описание проблемы:
Я работаю над приложением android, которое сгенерирует ключ AES и сохранит его в хранилище ключей.
Когда мне нужно отправить данные на сервер, я используйте ключ AES для шифрования данных, используйте ключ publi c сервера для шифрования ключа AES и отправьте зашифрованные данные + зашифрованный ключ на сервер для расшифровки полной загрузки.
код для генерации ключа в android ниже:
public void generateKey()
{
try {
if (!keyStore.containsAlias(KEY_ALIAS)) {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore);
keyGenerator.init(
new KeyGenParameterSpec.Builder(KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setRandomizedEncryptionRequired(false)
.build());
keyGenerator.generateKey();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
Когда мне нужно зашифровать данные, я получаю ключ с помощью этой функции
private java.security.Key getSecretKey(Context context) throws Exception {
return keyStore.getKey(KEY_ALIAS, null);
}
Используя этот ключ, я смог зашифровать данные. но проблема заключается в попытке зашифровать ключ, чтобы отправить его на сервер.
Я попытался получить ключ как byte [], чтобы зашифровать его, но с помощью функции
key.getEncoded();
в результате байтовый массив всегда нулевой.
Что здесь не так и как его решить?
Приложение для Android 23 +