2011-02-22 23 views
1

我一直在研究一個依靠SQLite數據庫存儲信息的寵物項目。最近,我決定要讓應用程序受密碼保護,並且要加密數據庫。到目前爲止,沒有什麼大問題。在我的設計中,我一直在努力把重點放在最大可能的安全性上。是的,我知道最大的安全性是毫無價值的,因爲考慮到一切(我正在談論鹽和密碼文本;密碼在用戶的大腦中)存儲在一個設備上,任何知道他們正在做什麼的人都可能會破壞它,如果他們擁有裝置。那爲什麼要麻煩?因爲我可以。Android上解密數據庫的臨時存儲

因此,爲此,我一直在考慮在應用程序運行時將數據庫的解密版本存儲在何處。網上臨時存儲最常見的建議是SD卡。這對我來說並不好,因爲如果應用程序異常終止(使用任務管理器輸入過度熱心的用戶),或者永遠不會終止,SD卡上的數據將持續存在。

最近我一直在玩着將整個東西存儲在內存中的想法,但這似乎是非常糟糕的做法。我的測試設備上的數據庫非常小(小於100K,其中有大量測試數據),但它仍然以我錯誤的方式磨蹭,這對用戶來說可能有一個龐大的數據庫。我很清楚這樣一個事實:只要有人說「用戶永遠不會這樣做」,那麼一些人就會將這一限制打倒在地。

所以,擺在問題的形式:哪裏是Android設備上臨時存儲解密數據庫的最佳位置?最好在應用程序執行之間的某處變化,但在這一點上,我願意接受建議。

在此先感謝。

回答

1

那麼,如果你使用sqlite和標準的Android SQLite數據庫助手,數據庫必須駐留在/ data/data //數據庫中。這是默認類中唯一可讀取的位置。

或者,您可以將它存儲在SDCard上並編寫自定義數據庫幫助程序。正如你所提到的,如果你的數據是安全的,有明顯的理由不這樣做。

我想我會建議做一些代碼混淆你的數據庫,也許通過運輸數據庫的數據需要解碼功能來解釋。除此之外,我認爲遠程數據庫將是保護數據的唯一可行機制。

+0

感謝您的回覆。目前,我已經創建了自己的自定義數據庫輔助類,所以這不是問題。我還使用手機的本地數據分區中的AES進行所有數據庫加密和解密。我的問題更多的是在何時放置臨時解密的數據庫,直到重新加密並將其存儲迴文件系統。遠程數據庫一直是一個有吸引力的選擇,但目前是不可行的。 – phobos51594 2011-02-23 17:22:50

+0

@ phobos51594我正在努力加密SD卡上的數據庫文件,然後解密它,但我失敗了。你能否給我提供一些示例代碼,你是如何做到的?我非常感謝這一點 – 2012-06-02 10:23:33