2014-01-18 211 views
0

我正在研究一個我喜歡阻止用戶訪問我的應用數據庫內容的Android項目。使用密碼保護SQLite數據庫

我認爲有3種方式,但我不知道一個人是最好的,也不知道他們應該如何工作。

我的問題是我不知道哪種方式是最好的,它是如何工作的。

  1. 將所有文本和數據加密到數據庫並解密,當我想使用它!
  2. 加密整個數據庫並在應用程序需要時解密。
  3. 使用第三方庫,如SQLCipher。

回答

2

我上,我想阻止用戶去我的應用程序的數據庫

如果用戶的設備上的內容的Android項目的工作,它是用戶的數據庫,而不是你的。它只會是你的數據庫,如果它在你的硬件上。

我的問題是我不知道哪種方式是最好的,它是如何工作的。

所有這些對於阻止用戶訪問用戶數據都是無效的。

您的數據庫應該位於內部存儲器上,即SQLite數據庫的默認位置。大多數用戶無法訪問內部存儲以訪問數據庫。唯一能夠根植他們設備的人。任何人只要有能力和興趣都剷除他們的設備,並嘗試在你的應用數據庫以獲取將擁有的技能和興趣之一:

  1. 反向工程您的應用程序找到你的加密算法和密鑰,或

  2. 某處上傳數據庫,並說服別人來反向工程您的應用程序找到你的加密算法和密鑰

如果你不希望用戶能夠訪問數據庫,做沒有把它放在他們的設備上。通過您的服務器的Web服務訪問它。

類似於SQLCipher for Android的工具用於防止用戶的數據受到攻擊。它們不適合作爲DRM解決方案。

+0

也許你是對的,但我不能把數據庫放在我的應用程序結構的網絡上。我需要更加努力地達到預先加載的數據庫(不是用戶數據庫!),儘管我知道某些專業人員可以使用某些工具或預留工程來訪問我的數據庫。但這不重要。我只是想讓它更難以達到我的數據。那麼最簡單和最好的方法是什麼? – Kenji

+0

@enji:不要做任何事情。只需將數據庫保存在默認位置的內部存儲上,就像常規數據庫一樣。 – CommonsWare

1

如果你打算加密數據,爲了善意,請使用經過測試的現有庫,而不是自己做得不好!例如,SQLite的作者本身銷售encryption extension(它用於醫療信息系統等),還有其他一些可能的解決方案。 (我用Google搜索sqlite encryption,我相信你也能!)

但是,要知道,容納兩個加密的數據和密鑰來解密同一非信任設備上的數據是總是可能是麻煩;這是DRM問題(也就是說,你已經把用戶真正需要的所有東西都放在了用戶套件上,而且用戶相對具有敵意)。你應該考慮你的應用程序架構; Android設備往往連接的很好,所以你可以看看是否將數據庫放在服務器的某個地方,並且只嚮應用程序提供一點點(它可能緩存或不緩存),這是合適的。

+0

我正在研究它應該獨立於互聯網的多媒體應用程序。導致我的應用程序應該工作,即使沒有網絡,它應該負責。我只想找到一些方法來加強對我的預加載數據的訪問。我知道,沒有互聯網的每一種方式都可能是可以破解的。所以用這種方式幫助我。 – Kenji

+0

@Kenji正如我所說,已經使用過'see'(連接回答,商業廣告,已知是好的)(儘管可能不是敵對的環境),我發現了一些可能的替代方案(我不知道它的質量)只是因爲我想到的最明顯的關鍵字而瘋狂Google搜索。來吧!你找不到比這更簡單的搜索! –