衆所周知,我們可以使用sqlcipher加密數據庫,並將其用於android項目中。出於某種原因,我不想再使用它了。如何知道一個SQLite數據庫是否加密
通過使用sqlcipher_export轉換數據庫。
所以我的問題是
- 是有讓我檢查的數據庫加密與否,從而決定是否需要有解密的好辦法。
2,如果發生意外事件(在遷移過程中關機),我該怎麼辦?
衆所周知,我們可以使用sqlcipher加密數據庫,並將其用於android項目中。出於某種原因,我不想再使用它了。如何知道一個SQLite數據庫是否加密
通過使用sqlcipher_export轉換數據庫。
所以我的問題是
2,如果發生意外事件(在遷移過程中關機),我該怎麼辦?
直接檢查數據庫文件的前16個字節,如果它們等於字符串「SQLite format 3 \ 000」,則該文件未加密,並且是標準的SQLite數據庫。
如果在sqlcipher_export期間發生了某種情況併發生崩潰,原始數據庫將保持不變。在隨後的發佈中再次運行導出。
把@StephenLombardos字符串「SQLite的格式3 \ 000」爲UTF-8 byte counter回來爲19 bytes
因此而他的答案是正確的,它需要稍加修改。
我會讀第一17個字節,並檢查他們是否等於「的SQLite格式3 \ 0」
如果以上陳述爲真,那麼你的數據庫文件是未加密
如果該聲明是虛假的,那麼你的db文件是加密
謝謝。但想要更多地瞭解Q2。但是,如果移動導出來替換原來的東西會發生什麼......我認爲我們在這裏做不了多少事情? – Bear
您應該使用文件重命名來移動文件,使其成爲原子操作。它會成功,或者如果發生操作系統崩潰,它會失敗。如果失敗,原始文件將保持不變,您可以重新運行導出。您也可以考慮這樣的事情:將file.db文件複製到file.db.bak,將plain.db重命名爲file.db,刪除file.db.bak。在簡歷中,如果您的應用程序看到file.db.bak存在,則可以假設移動失敗,將file.db.bak複製回file.db並重試導出。如果您認爲正確,請接受答案。 –
此技術對於SqlCipher加密數據庫不起作用。 –