0

私のアプリケーションでは、sdcard にデータベース ファイルをコピーして、データベースをエクスポートする機能を実装しました。ファイルを暗号化したり、特別なキーを必要とせずに、ファイルを取得した人が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();
            }
        }
    }
}
4

1 に答える 1

0

sqlcipherを使用できます。それはアンドロイドをサポートしています。DBはすでに暗号化されているため、既存のコードでエクスポートできます。

于 2013-03-22T11:57:35.017 に答える