3

我想創建一個SDK項目,該項目必須將數據封裝並存儲在包含該庫的應用程序無法訪問的地方。數據庫通過HTTPS接收。Android庫項目中的數據封裝

因此,首先我研究了共享偏好不是選項,因爲Android中的庫沒有自己的上下文,只能與應用程序的上下文一起工作,並且共享前綴中的數據對父應用程序可見。

什麼是最好的選擇來存儲這樣的敏感數據,以避免使用lib的應用程序?我計劃使用代碼混淆方法和商業工具來儘可能地檢索這些數據。所以也許我應該使用Android Keystore System或者簡單的加密就足夠了?

編輯:好吧,似乎唯一的方法來存儲數據的安全是加密它的變種之一。但還有另一個問題:它會阻止父應用程序訪問RAM並從那裏讀取數據嗎?假設設備沒有植根。

+1

我用寫本地使用NDK一些代碼,使業務邏輯的一部分,是「安全」的二進制庫。 – betorcs

+0

是的,這是有效的選項之一,我已經使用這種方法來存儲網絡API密鑰 – bvk256

回答

0

您可以使用SQLite作爲數據存儲。它比依賴外部庫更好(因爲在你的情況下你正在編碼庫)。讓我們保持輕鬆。

每個數據庫實例都有自己的名稱和應用程序按名稱訪問它。作爲一種可能的解決方案,您可以對數據庫實例的名稱進行編碼,並在運行時對其進行解碼。這會隱藏您的開發人員的訪問點。

實施SQLiteOpenHelper類:

哪裏Utils.decode("Ylhsd1lYTnpkMjl5WkE9PQ==")是您運行得到正確的數據庫名稱的方式。混淆後的代碼看起來就像這樣:

com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ==")) 

當然,Ylhsd1lYTnpkMjl5WkE9PQ==僅僅是一個樣品,你可以使用任何其他。

Check this answer有關第二步的詳細信息。

+0

這可能與使用共享的首選項中被加密的數據,因爲它是用於創建此SQLite數據庫父應用的上下文。 – bvk256

+0

您的lib將使用父上下文,但您的密鑰。開發人員無法訪問您的數據庫創建。是的,你可以用SharedPrefs做同樣的事情。這裏的要點是隱藏的名稱,而不是存儲數據的方式。 – Val