2013-06-27 93 views
2

衆所周知,我們可以使用sqlcipher加密數據庫,並將其用於android項目中。出於某種原因,我不想再使用它了。如何知道一個SQLite數據庫是否加密

通過使用sqlcipher_export轉換數據庫。

所以我的問題是

  1. 是有讓我檢查的數據庫加密與否,從而決定是否需要有解密的好辦法。

2,如果發生意外事件(在遷移過程中關機),我該怎麼辦?

回答

4

直接檢查數據庫文件的前16個字節,如果它們等於字符串「SQLite format 3 \ 000」,則該文件未加密,並且是標準的SQLite數據庫。

如果在sqlcipher_export期間發生了某種情況併發生崩潰,原始數據庫將保持不變。在隨後的發佈中再次運行導出。

+0

謝謝。但想要更多地瞭解Q2。但是,如果移動導出來替換原來的東西會發生什麼......我認爲我們在這裏做不了多少事情? – Bear

+0

您應該使用文件重命名來移動文件,使其成爲原子操作。它會成功,或者如果發生操作系統崩潰,它會失敗。如果失敗,原始文件將保持不變,您可以重新運行導出。您也可以考慮這樣的事情:將file.db文件複製到file.db.bak,將plain.db重命名爲file.db,刪除file.db.bak。在簡歷中,如果您的應用程序看到file.db.bak存在,則可以假設移動失敗,將file.db.bak複製回file.db並重試導出。如果您認爲正確,請接受答案。 –

+0

此技術對於SqlCipher加密數據庫不起作用。 –

0

把@StephenLombardos字符串「SQLite的格式3 \ 000」爲UTF-8 byte counter回來爲19 bytes

因此而他的答案是正確的,它需要稍加修改。

我會讀第一17個字節,並檢查他們是否等於「的SQLite格式3 \ 0」

如果以上陳述爲真,那麼你的數據庫文件是未加密

如果該聲明是虛假的,那麼你的db文件是加密

相關問題