我有一個使用System.Data.SQLite從現有應用程序中導出的加密SQLite數據庫文件。基於我所能找到的,System.Data.SQLite使用128位RC4加密。Android SQLCipher RC4加密數據庫文件「文件已加密或不是數據庫」
當我嘗試使用SQLCipher在我的Android應用程序中加載此數據庫時,出現以下錯誤「文件已加密或不是數據庫」。我試過使用數據庫鉤子來設置雜注鍵= rc4,但這似乎沒有幫助。我能找到的唯一一個可以打開這個數據庫文件的程序是SQLite2009 Pro Enterprise Manager。它不會打開它,允許我瀏覽並運行查詢。
這裏是代碼我目前正在使用:
try
{
SQLiteDatabase.loadLibs(activity);
//this function copies the db file from the project assets to the data/databases folder
copydatabase();
File databaseFile = activity.getApplicationContext().getDatabasePath("someDB.db3");
SQLiteDatabaseHook hook = new SQLiteDatabaseHook(){
public void preKey(SQLiteDatabase database){
database.execSQL("pragma cipher = rc4");
}
public void postKey(SQLiteDatabase database){
database.execSQL("pragma cipher = rc4");
}
};
SQLiteDatabase database = SQLiteDatabase.openDatabase(databaseFile.getAbsolutePath(), "mypassword", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS|SQLiteDatabase.OPEN_READWRITE, hook);
Cursor cursor = database.rawQuery("SELECT * FROM SOMETABLE;", null);
if (cursor.moveToFirst()){
do{
String data = cursor.getString(cursor.getColumnIndex("SOME_COLUMN"));
}while(cursor.moveToNext());
}
cursor.close();
}
catch(Exception ex)
{
Log.e(ex.getMessage().toString(), ex.getStackTrace().toString());
}
什麼我做錯了任何想法?