2013-10-22 16 views
1

我正在構建一個Android應用程序,其中包含具有非常敏感數據的SQLite數據庫。由於任何對設備進行物理訪問的人都可以複製數據庫,所以我想到了一些解決方案來保護數據庫中的數據。我們當然可以在將其輸入到數據庫之前對其進行加密,但是由於這會妨礙實際查詢數據庫的可能性,因此會使數據庫無效。另外:如果我們將密鑰存儲在應用程序中,它將使得檢索密鑰變得非常容易,並且加密將毫無意義。如何保護我的Android應用程序中的同步數據?

所以我們同步所有數據用在登錄服務器,之後有幾個選項:

  1. 刪除整個數據庫中的onStop()方法。我認爲這將是非常安全的,除了應用程序崩潰時,我認爲它不會調用onStop()方法。既然你可以手動銷燬這個進程,我想假設有一個物理訪問設備的人仍然可以訪問數據庫。對?
  2. 使用內存中的SQLite數據庫。根據這個SO回答,雖然「到內存數據庫的每個新連接都創建一個新的空數據庫。」「。這意味着你不能在活動中分享它。
  3. 將同步數據存儲在一個Java Lists/Arrays中,並從中獲取所有信息。問題是這些列表只存在於一個Activity中。爲了解決這個問題,我想在一個片段內創建完整的應用程序。我還沒有開始嘗試,但它看起來並不像通常那樣做。

有沒有人知道這些想法是否有意義,更重要的是,如果沒有更好/更方便的跨應用程序活動安全地保存數據的方法?歡迎所有提示!

+0

您是否考慮過僅在內存中存儲密鑰?爲什麼不使用用戶密碼作爲密鑰? –

回答

1

這意味着你不能在活動中分享它。

當然可以。使用單身人士SQLiteDatabase。無論如何,您應該這樣做,以便跨多個線程啓用線程安全訪問。

將同步數據存儲在一對Java列表/數組中,並從中獲取所有信息。問題是這些列表只存在於一個Activity中。

再次,如果您對內存泄漏有所謹慎,則可以使用單例或靜態數據成員。但是,如果使用「一對Java列表/數組」是一個選項,我不知道爲什麼你搞亂了SQLite。 SQLite旨在將關係數據存儲在文件中,聽起來好像不需要任何文件。

+0

關於單例SQLiteDatabase;我們是否可以在所有活動中保持連接開放,以便它不會重新創建數據庫? – kramer65

+0

@ kramer65:「連接」只是一個關閉數據庫的問題。 – CommonsWare

相關問題