简体   繁体   中英

moving from android sqlcipher to android sqlite database

From the last 3 days i am trying to upgrade my database to a higher version of SQLCipher library (v3.1.0). I did every step and followed a few tutorials too. But keep on getting the error "File is encrypted or not a Database". Now am trying to move to unencrypted database ie. simple sqlite database. Do we have a way to move to encrypted database to un-encrypted database? Thanks in advance.

This is the code i am working on:

public MyDBAdapter(Context context) {
    this.context = context;
    File dbFile = context.getDatabasePath(DATABASE_NAME);
    String dbPath = context.getDatabasePath(DATABASE_NAME).toString();

    if (dbFile.exists()) {
        try {
            SQLiteDatabase.loadLibs(context.getApplicationContext());//load SqlCipher libraries

            SQLiteDatabase db = getExistDataBaseFile(dbPath, KEY_PASSPHRASE_ENCRYPTION, dbFile);

            if (version == 1) {
                MigrateDatabaseFrom1xFormatToCurrentFormat(
                        dbFile, KEY_PASSPHRASE_ENCRYPTION);
            }
            System.out.println("Old Database found and updated.");
        } catch (Exception e) {
            System.out.println("No Old Database found");
        }
    }

    this.dbhelper = new MyDBHelper(this.context, DATABASE_NAME, null,
            DATABASE_Version);
    db = dbhelper.getWritableDatabase(KEY_PASSPHRASE_ENCRYPTION);

}


    private SQLiteDatabase getExistDataBaseFile(String FULL_DB_Path, String password, File dbFile) {// this function to open an Exist database 
        SQLiteDatabase.loadLibs(context.getApplicationContext());
        SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {
            public void preKey(SQLiteDatabase database) {
                System.out.println("-----Inside preKey");
            }

            public void postKey(SQLiteDatabase database) {
                System.out.println("-----Inside postKey");
                database.rawExecSQL("PRAGMA cipher_migrate;");

            }
        };
        SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
                dbFile, "Test123", null, hook); // Exception
        return database;

    }

If you are upgrading your SQLCipher library to the latest version, currently at 3.1.0, and your previous version was 2.x (as you mentioned in the comments above), you will need to upgrade the database file format as well. One of the big changes in the 3.x release was an increase in key derivation length, from 4,000 to 64,000. If you are using all of the standard SQLCipher configurations, upgrading the database format is straight forward. We have included a new PRAGMA call cipher_migrate that will perform this operation for you. You can execute this within the postKey event of the SQLiteDatabaseHook which is to be provided in your call to SQLiteDatabase.openOrCreateDatabase . An example of this can be found in the SQLCipher for Android test suite here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM