2013-12-18 71 views
0

我正忙於爲iPhone和iPad iOS7編寫商業電子詞典類型的應用程序。該應用程序的價值真的在我工作多年的數據庫中,而不是應用程序本身。該數據庫非常大(在轉換爲SQLLite之前,在Windows計算機上爲195mb),我想知道保護其中的數據的最佳方法是什麼,以便應用程序可以讀取它,但其他人無法讀取/獲取它。看起來大多數移動開發人員使用SQLLite,但數據可以通過普通的十六進制編輯器輕鬆讀取。保護iOS數據庫信息

從這個論壇和其他人那裏我瞭解到SQLCipher是一個很好的工具。我的問題是,它證明SQLCipher加密數據庫,然後在需要在臨時文件中讀取它時對其進行解密,然後再次對其進行加密。如果是這樣的話,我有兩個問題。

  1. 數據庫非常大,每次解密都會導致應用程序非常慢。
  2. 什麼時候黑客可以在短時間內讀取/複製解密(臨時)文件?

難道我明白SQLCipher的正常工作,如果是這樣,是否有任何其他工具/方法來加密/保護數據庫,使程序仍然可以使用SQL查詢閱讀未做如此輕易地以任何方式提供的數據,或者你可能有其他建議?

謝謝

回答

0

根據此頁:http://sqlcipher.net/design他們不解密您的數據庫作爲一個整體,所以回答你的問題#1是否定的。他們聲稱大約5-15%的標準SQLite性能開銷。

至於#2 - SQLCipher將以頁面解密數據庫,因此理論上 - 有人可以以解密方式訪問內存中的頁面。但是,對於您使用的任何加密方法,情況都是如此。試想一下 - 即使你解密完整的數據庫,你的應用程序也需要顯示/訪問它的一些數據,不知何故在某個時候。此時數據必須解密。這裏唯一的問題 - 在給定的時刻多少數據將被解密。

你的另一種選擇是嘗試使用標準SQLite和標準ecnryption庫自己實現ecnryption/decryption。例如,您可以單獨對每行(甚至是敏感數據的字段)進行加密,並在需要時對它們進行解密 - 但是,在特定時刻,這個特定行將在內存中解密並且對黑客可見。

+0

如果我想加密一個文本文件,那該怎麼辦? – PeterK

+0

當然。您可以加密文本文件,但是您需要在應用程序的內存中解密它,對嗎? – sha

+0

謝謝你的回答。如果它只發生在內存級別上,那麼我很高興,只要整個文件沒有被解密爲臨時文件,那麼某個人可以在解密格式時進行復制。 我在想,SQLLite是在iOS7中使用的最簡單的數據庫格式,還是可能有另一種構建在不需要SQLCipher之類的加密函數的加密函數? – JayCee