Приватный файл для приложения - PullRequest
1 голос
/ 19 марта 2012

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

Ответы [ 5 ]

3 голосов
/ 19 марта 2012

use Environment.getDataDirectory (), http://developer.android.com/reference/android/os/Environment.html#getDataDirectory()

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

File myPrivateFile = new File(Environment.getDataDirectory(), context.getPackageName() + File.separator + "secret.txt");

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

1 голос
/ 31 мая 2012

Чтобы открыть файл из личной папки приложения, можно использовать этот путь к файлу:

File myFilePath = new File(getContext().getFilesDir() + File.separator + "myFile")

Вы можете проверить, существует ли файл if(myFilePath.exists()) ...

Чтобы сохранить текстовый файл в личном каталоге приложения

FileOutputStream fos = null;
try {
   fos = getContext().openFileOutput("myFile",Context.MODE_PRIVATE);
} catch (FileNotFoundException e) { }

try {
   fos.write(myTextString.getBytes());
} catch (IOException e) { }

try {
   fos.close();
} catch (IOException e) { }

Чтобы сохранить изображение в личном каталоге приложения:

try {
  myBitmapImage.compress(CompressFormat.JPG, 90, 
                                   openFileOutput("myimage.jpg", MODE_PRIVATE));
} catch (Exception e) { }
1 голос
/ 19 марта 2012

Чтобы создать личный файл приложения (который не может быть прочитан другими приложениями), вы должны использовать Context.openFileOutput () с флагом MODE_PRIVATE .

ЕслиВы обеспокоены тем, что можете обернуть возвращенный InputStream в CiperOutputStream и зашифровать его содержимое.

Если вы храните ключи в стандартном криптографическом формате (X.509 или PKCS # 12), вы можете использоватьновый KeyChain API, представленный в ICS.

1 голос
/ 19 марта 2012

Почему бы просто не сохранить его в SharedPreference ??

Сделайте ваш SharedPreference личным для вашей деятельности, позвонив ..

getSharedPreferences(yourfile, MODE_PRIVATE); 

Это гарантирует, что только ваш Activity может получить доступ к SharedPreference.

0 голосов
/ 19 марта 2012

Лучше всего хранить зашифрованный файл и расшифровывать его во время выполнения, чтобы даже рутованный телефон не смог прочитать ваши данные, даже если у него есть доступ к нему. Конечно, это условие типа «куриное яйцо» (где бы вы хранили свой ключ для зашифрованного файла), и единственное, что лучше, чем помещать ключ в переменную, - это сгенерировать этот ключ во время выполнения, используя какой-то непонятный метод (см. this )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...