Я шифрую файл, созданный в приложении Android, в службе Bluetooth. Позже в другом классе я хочу расшифровать этот файл и загрузить его на сервер.
Для шифрования я использую библиотеку AndroidX androidx.security:security-crypto:1.0.0-alpha02, которая является оболочкой для Tink. Я прочитал все документы и руководства для разработчиков, которые смог найти для 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, который будет иметь правильные ключи.
Буду признателен за любую помощь или понимание!
Спасибо, Майкл.
available
просто показывает данные, которые доступны напрямую. Просто любопытно, будет ли чтение возвращать -1 или фактические данные. - person Maarten Bodewes   schedule 20.02.2020