2013-03-22 3 views
0

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

Как я могу реализовать легкую и простую защиту для моего файла?

Ниже приведен мой код для экспорта db.

public void exportDB() { 
    final String destFolder = "/"+Constants.Files.APP_FOLDER+"/"+Constants.Files.BACKUP_FOLDER; 
    try { 
     File myBackupDir = new File(Environment.getExternalStorageDirectory() + destFolder); 
     if(!myBackupDir.exists() || !myBackupDir.isDirectory()) myBackupDir.mkdirs(); 
     if(myBackupDir.isDirectory()){ 
      File data = Environment.getDataDirectory(); 
      if (Environment.getExternalStorageDirectory().canWrite()) { 
       final String currentDBPath= "//data//" + Constants.Files.PACKAGE_NAME + "//databases//" + Constants.Files.DB_NAME; 
       File currentDB = new File(data, currentDBPath); 
       File backupDB = new File(myBackupDir, Constants.Files.DB_NAME); 
       if(currentDB.isFile()){ 
        copyFile(new FileInputStream(currentDB), new FileOutputStream(backupDB)) 
       } 
      } 
     } 
    } catch (Exception e) { 
     Log.e(mTag, "exportDB", e); 
    } 
} 



public static void copyFile(FileInputStream fromFile, FileOutputStream toFile) throws IOException { 
    FileChannel fromChannel = null; 
    FileChannel toChannel = null; 
    try { 
     fromChannel = fromFile.getChannel(); 
     toChannel = toFile.getChannel(); 
     fromChannel.transferTo(0, fromChannel.size(), toChannel); 
    } finally { 
     try { 
      if (fromChannel != null) { 
       fromChannel.close(); 
      } 
     } finally { 
      if (toChannel != null) { 
       toChannel.close(); 
      } 
     } 
    } 
} 
+0

Это данные пользователя, а не ваши. Разрешите пользователю делать то, что пользователь хочет с данными пользователя. – CommonsWare

ответ

0

Вы можете использовать sqlcipher. Он поддерживает android. Вы можете экспортировать его с существующим кодом, поскольку БД уже зашифрована.

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