Я шифрую файл, созданный в приложении android, в службе Bluetooth. Позже в другом классе я хочу расшифровать этот файл и загрузить его на сервер.
Для шифрования я использую библиотеку AndroidX androidx.security:security-crypto:1.0.0-alpha02, которая является оберткой вокруг Дзынь. Я прочитал все документы и руководства для разработчиков по EncryptedFile, EncryptedFile.Builder и т. Д.
Я шифрую файл следующим образом:
String keySetAlias = "BilboBaggins";
String keySetPref = "Hobbits";
EncryptedFile m_StudyChannelEncryptedFile = new EncryptedFile.Builder(
filePath,
getApplicationContext(),
masterKeyAlias,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB).setKeysetAlias(keySetAlias).setKeysetPrefName(keySetPref).build();
m_output = m_StudyChannelEncryptedFile.openFileOutput();
Отсюда я могу написать в файл, как в обычном FileOutputStream, и, глядя на данные, записанные в памяти телефона, я могу подтвердить, что они зашифрованы.
Перед загрузкой я пытаюсь сделать то же самое в другом классе и затем расшифруйте его.
String masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
String keySetAlias = "BilboBaggins";
String keySetPref = "Hobbits";
EncryptedFile encryptedFile = new EncryptedFile.Builder(
filePath,
getApplicationContext(),
masterKeyAlias,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB).setKeysetAlias(keySetAlias).setKeysetPrefName(keySetPref).build();
// Read channel data file
FileInputStream fChannel = encryptedFile.openFileInput();
m_Dat1Size = fChannel.available();
Отсюда проблема в том, что доступный размер файла, который я получаю, равен нулю - как будто его не существует. Я могу подтвердить, что записанные исходные данные не перезаписываются, хотя файл в хранилище телефона все еще содержит зашифрованные данные.
Я считаю, что, предоставив ему местоположение keySetAlias, keySetPref конструктор EncryptedFile должен иметь возможность инициализировать экземпляр EncryptedFile с правильными ключами.
Буду признателен за любую помощь или понимание!
Спасибо, Майкл