2013-04-11 61 views
0

我看到類似的問題,但他們不符合我的要求。Android。什麼是最好和最安全的方式來存儲數據(從網絡服務更新)

我有一個應用程序不時需要從Web服務更新。數據包含url,description,title等字段。從20萬到40萬條目。 它在本地使用,並且在這些數據中進行搜索的次數很多(取決於用戶的活動)。

數據不應該由用戶訪問和搜索需要儘可能快。我知道沒有辦法使它100%無法讀取,所有東西都可以進行反向設計和解密(我必須將加密密鑰保存在電話中)。我的目標是儘可能地讓它變得困難。

我有幾個選擇: 1.在服務器上加密數據並將其作爲二進制文件發送到手機。在需要時將其解密 2.還將數據作爲文件發送。閱讀並存儲到本地數據庫 3.將其作爲JSON(可能已加密),存儲到數據庫或文件

使用JSON有一個優勢,因爲它可以更輕鬆地實現本地數據和遠程。

此外還有一個關於數據庫的問題。每次我想找到什麼東西時,我是否應該存儲所有加密的條目並將其解密?這可能會影響手機的性能。

還有一個可能的保護層 - 使加密密鑰具有動態性。每天從服務器獲取密鑰一次,重新加密存儲的數據,第二天更換密鑰。不過,我認爲這是一個開銷。告訴我,如果不是。

你會選擇什麼樣的選擇?有沒有更好的解決方案?

P.S.數據庫將會每天更新。

感謝

+0

400k條目在手機上? – njzk2 2013-04-11 14:25:37

回答

0

我會存儲在SQLite的數據,但也使解密方案更爲複雜,使用至少兩個鍵......一個,存儲在共享庫,其他的從服務和解鎖下載與那個關鍵。

這也體現在您的思考策略中 - 您可以在APK中嵌入一個「設備」密鑰 - 作爲硬編碼字節[]嵌入,另一個「日常」密鑰將用於打開「每日」數據更新。雖然,我寧願使用字節數組格式的「每日」鍵,也不要以任何形式將它以任何形式保存在設備上,除非它在內存中僅在其使用期限內解密。這將是我所做的升級,我只是將該密鑰保存爲base64編碼的設備密鑰加密字符串。

使用SQLite相當簡單,你可以在這裏看到 - Android Database to Array

我做了類似於我所解釋的事情(不包括每日更新的密鑰) - not decrypting what I crypted

請看看並討論:)

相關問題