Безопасное хранение изображений Android - PullRequest
2 голосов
/ 22 ноября 2011

Я разрабатываю приложение для Android 2.2, которое позволяет пользователю приобретать и загружать изображения с веб-сервера. Как только он загружает эти изображения, только это приложение должно иметь возможность просматривать эти изображения. Один из возможных способов, которым я мог придумать, - это зашифровать и сохранить изображения на SD-карте.

Но меня беспокоит то, что даже после шифрования эти файлы будут видны для приложений проводника (которые могут удалять / переименовывать / перемещать файлы). Можно ли хранить эти файлы на SD-карте таким образом, чтобы они не были видны другим приложениям?

В BlackBerry есть функция блокировки вперед (http://www.blackberry.com/developers/docs/4.5.0api/net/rim/device/api/io/file/ExtendedFileConnection.html).Once файл сохраняется на SD-карту с помощью этого метода, он будет виден только соответствующему приложению и устройству. Есть ли что-то подобное для Android?

Желательно ли хранить изображения в базе данных sqlite. Файл базы данных не виден другим приложениям в телефоне. (PS: изображений будет много)

Можно ли сохранить файлы изображений в формате .asec. Существуют ли API-интерфейсы для преобразования файла в формат .asec? Я понимаю, что файлы .asec не будут отображаться исследователями файлов.

Пожалуйста, не могли бы вы направить меня или предложить идеальное решение для этого сценария.

Ответы [ 5 ]

2 голосов
/ 23 ноября 2011

Существует решение для хранения данных на SD-карте таким образом, чтобы не было возможности просматривать файлы в средстве просмотра файлов на устройстве на телефоне без рутирования.

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

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

На телефоне с root-доступом изображения могут быть скопированы из личной папки.Поэтому вы должны подумать о шифровании изображения каким-либо образом.Шифрование, однако, не так просто, потому что пользователь всегда может попытаться извлечь ключ шифрования из вашего исходного кода или сетевого трафика.

2 голосов
/ 22 ноября 2011

Как разработчик приложения, вы являетесь гостем на устройстве пользователя.Пользователь имеет больше контроля над устройством, чем когда-либо.Там нет места, чтобы скрыть секретный ключ, необходимый для шифрования.Вы вынуждены играть хорошо, возможно, вы ищете "(в) безопасность, хотя мрак".

1 голос
/ 22 ноября 2011

Вы можете хранить файлы в базе данных, если нет ограничений на размер БД.

Или вы можете хранить изображения в одном контейнере (например, в нашей виртуальной файловой системе SolFS) и извлекать их из этого контейнера. Пользователь по-прежнему сможет скопировать контейнер. Одним из вариантов здесь является шифрование контейнера с использованием некоторого идентификатора устройства (например, кода IMEI) как части ключа шифрования.

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

И еще один вариант - создать собственный формат файла для ваших изображений, чтобы только ваше приложение могло загружать данные изображений. Опять же, вы можете зашифровать такие файлы, используя идентификатор устройства, чтобы «привязать» изображение к устройству.

Обратите внимание, что в настоящее время интеллектуальная собственность (включая изображения) лицензируется пользователю, а не устройству. Или, по крайней мере, пользователь имеет право перемещать IP между несколькими своими системами (скажем, не более 3-х устройств). Вы также можете справиться с этим, зашифровав изображение случайным ключом, а затем зашифровав случайный ключ, используя соль IMEI + для каждого устройства (так что случайный ключ будет зашифрован, скажем, 3 раза). Затем пользователь может перемещать файл между своими системами. Конечно, это не единственный способ, позволяющий пользователю перемещать файлы между своими устройствами.

0 голосов
/ 23 ноября 2011

Вы можете зашифровать файлы изображений и затем сохранить их на SDCard.Это не мешает пользователю найти / скопировать / удалить файл.Вы можете использовать класс File и использовать File.setReadOnly(), но я думаю, что для этого требуется root-доступ.В любом случае у пользователя будут те же разрешения, что и у вашего приложения.

Самый безопасный способ - создать полноценный онлайн-просмотрщик.

0 голосов
/ 22 ноября 2011

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

...