我正在研究使用sqlcipher加密的數據庫的應用程序。該加密的密碼由緩存字存儲。無法將sqlcipher加密數據庫附加到另一個
爲了使我的數據庫備份我用下面的代碼:
// ggf. Datenbank öffnen
openGuard();
mDb.execSQL("ATTACH DATABASE '" + outFileName + "' AS backup KEY 'asdfghjkl';");
mDb.rawExecSQL("SELECT sqlcipher_export('backup');");
mDb.execSQL("DETACH DATABASE backup;");
的方法openGuard()用於檢查數據庫尚未運行結束,如果不能做到這一點。
我已通過使用空鍵檢查備份,以製作未加密的數據庫副本。然後,我可以在adb shell上使用它,並使用sql語句獲取所需的數據。
我現在很長一段時間的問題是,我無法使用我的備份來恢復我的應用程序的數據庫。我想這樣的代碼:
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(backupFile, "asdfghjkl", null);
db.execSQL("ATTACH DATABASE '" + dbFile + "' AS encrypted KEY '" + mCacheWord.getEncryptionKey() + "';");
db.rawExecSQL("SELECT sqlcipher_export('encrypted')");
db.rawExecSQL("DETACH DATABASE encrypted;");
或者我試圖
db.execSQL("ATTACH DATABASE '" + dbFile + "' AS encrypted KEY '" + encodeRawKey(mCacheWord.getEncryptionKey()) + "';");
但在這兩種情況下,我得到了以下錯誤消息:
10-30 00:56:42.845: I/Database(14407): sqlite returned: error code = 26, msg = statement aborts at 5: [ATTACH DATABASE '/data/data/.../databases/database.db' AS encrypted KEY '[[email protected]';] file is encrypted or is not a database
10-30 00:56:42.845: E/Database(14407): Failure 26 (file is encrypted or is not a database) on 0x63bdedb0 when executing 'ATTACH DATABASE '/data/data/.../databases/database.db' AS encrypted KEY '[[email protected]';'
是否有任何人如何能幫助我與我的問題?
我最近檢查了這個建議,但沒有幫助。謝謝! – user2836375