Как мне поиграть в набор зашифрованных аудиофайлов в приложении для Android-плееров?Android-зашифрованный аудиоплеер
У меня есть проект приложения, где у меня будет набор зашифрованных аудиоконтента, хранящихся на устройстве пользователя. Один аудиоконтент (пример: подкаст) в этом случае будет состоять из нескольких зашифрованных файлов. Приложение работает как аудиоплеер, через который пользователи прослушивают этот аудиоконтент. Для удобства пользователей весь контент (подкаст) должен беспрепятственно воспроизводиться из одного файла в другой. Это отлично работает для обычных аудиофайлов с использованием класса MediaPlayer от android.
Для обеспечения безопасности файл дешифрованного файла ни в коем случае не должен присутствовать на хранилище пользовательских устройств таким образом, чтобы пользователь мог получить доступ к этому файлу любым другим способом, чем через мое приложение (даже на корневых устройствах).
Тип шифрования, который будет использоваться, еще не исправлен, поэтому я открыт для любого алгоритма, который лучше всего подходит для этого случая.
Я думал о расшифровке каждого файла перед его воспроизведением. Размер файлов не должен превышать 25 МБ, а шифрование/дешифрование AES для такого файла занимает около 300 миллисекунд, поэтому это не мешает слишком многому пользователю.
Есть две проблемы, я вижу здесь с двумя различными подходами к расшифровке:
- Если я расшифровать файл и сохранить его на устройстве, как обычный звуковой файл, пользователь сможет получить к нему (корневые устройства) и использовать его вне моего приложения.
- Если я дешифрую файл и сохраняю его в системной памяти, как можно сказать, массив байтов, как я могу воспроизвести это обратно пользователю? Я не нашел способа сделать это с помощью MediaPlayer или нашел любую другую библиотеку, которая позволила бы это сделать из коробки. Может быть, некоторая библиотека потокового аудио может быть изменена для воспроизведения дешифрованного файлового потока?
интересно посмотреть, если вы на самом деле видели это работает? В прошлом я использовал ExoPlayer 1 с пользовательским DataSource и смог получить RC4 Ciphers, работающий, но не AES. Теперь похоже, что они добавили специальный AesCipher специально для этого, но я все еще не получил его для работы ... –
Это похоже на лучшее решение. На данный момент я реализую немного другой подход, где я буду расшифровывать файлы в байтовый массив, который я буду, чем передавать через DataSource в ExoPlayer. Если бы я использовал AesCipherDataSource, как мне передать параметры AES IV? Связанная документация содержит только опцию для передачи secretKey в нее. AesCipherDataSource (byte [] secretKey, DataSource upstream). – ak93
Я нашел этот поток, который находится на тему для шифрования exoPlayer и AES: https://github.com/google/ExoPlayer/issues/2467 Кажется, что заставить это работать не так просто и вызывает такие проблемы, как медленный поиск. – ak93