2013-12-12 2 views
0

У меня есть зашифрованные фишки во внешнем хранилище/SD-карте. Файлы шифрованныхЧтение зашифрованных файлов на устройстве Android без копирования их в другое место?

  • изображений (JPG, BMP, ...)
  • видео (3gp, mp4, ...)
  • PDFS

Я хочу, чтобы загрузить растровые изображения, видео или PDF-файлы, чтобы загрузить их в моем ImageView, VideoView или открыть их через просмотрщик PDF. Проблема в том, что файлы являются секретными. Я не хочу, чтобы файлы были сохранены для их открытия. Они могут быть прочитаны другими во время просмотра PDFviewer, например.

Есть ли способ напрямую открыть изображение или PDF, даже если он зашифрован без копирования незашифрованной копии?

+0

Помогает ли http://stackoverflow.com/questions/8165216/what-is-the-use-of-memoryfile-in-android? –

+0

Звучит очень интересно. Но вокруг кода не так много образцов кода. Знаете ли вы, для чего именно? – softwaresupply

ответ

1

Если вы хотите сохранить ваши файлы в тайне, насколько это возможно для вашего приложения, я хотел бы использовать

javax.crypto.CipherInputStream 

или заказной подкласс этого. Для этого вам нужно будет отобразить свой контент, встроенный в ваше приложение, что довольно просто для изображений и видео. Для PDF-файлов вам нужно добавить элемент управления, который может отображать этот файл, чтобы другие пользователи не получали доступ к контенту.

Надеюсь, что это поможет.

+0

Выглядит вперед с помощью cipherSTream. Но этот cipherstream использует инициализацию, как показано здесь: http://stackoverflow.com/questions/9156545/android-file-cryptography. Что я хочу, это настраиваемый способ шифрования, как показано здесь: http://stackoverflow.com/questions/20531329/hot-to-encrypt-in-java-и-decrypt-in-android-and-ios. Поэтому у меня нет объекта Cipher для инициализации потока. Думаю, тогда это не сработает? – softwaresupply

0

Вы ссылаетесь на три сценария: изображения в ImageView, видео в VideoView и PDF-файлы в стороннее приложение.

Изображения легко. Убедитесь, что ваша логика дешифрования может предоставить вам расшифрованное содержимое InputStream, затем используйте соответствующие методы на BitmapFactory.

Я не знаю, как надежно подавать видео на VideoView из зашифрованного источника. Я знаю, что некоторые люди экспериментировали с встраиванием HTTP-сервера и потоковой передачей.

Вы можете опубликовать ContentProvider, который поставляет расшифрованное содержимое PDF в стороннее приложение. This sample app просто читает в файле, но вы можете использовать тот же подход, чтобы расшифровать его на этом пути.

Все это предполагает, что пользователь является ответственным за запрос на шифрование этого содержимого и сбор полученной парольной фразы от пользователя. Если вместо этого ваше видение состоит в том, что вы пытаетесь решить проблему DRM, любой, кто захочет, сможет расшифровать ваш контент, обратив свое приложение.

+0

Хорошо. Я использую этот алгоритм: http://stackoverflow.com/questions/20531329/hot-to-encrypt-in-java-and-decrypt-in-android-and-ios Для изображений, которые я дешифрует в простой байт [], и использование BitmapFactory на нем. Есть ли идеи для видео? Может быть, я могу скопировать их в каталог локальных файлов приложений, открыть его и сразу удалить?Можете ли вы объяснить подход поставщика контента? Может быть, внешняя библиотека PDF может выполнить эту работу? – softwaresupply

Смежные вопросы