2012-09-17 34 views
9

我需要在Android應用程序中存儲一些敏感信息。如果我把它放在一個資源文件中,看起來對於其他應用程序來說只需使用PackageManager.getResourcesForApplication()即可瀏覽和讀取該文件是微不足道的。在Android應用程序中如何存儲敏感的全局信息,如API密鑰?

哪裏是把這樣的信息,我們不希望人們能夠很容易地窺探正確的地方嗎?

它應該在編譯的java文件中嗎?或者,類文件也易於閱讀?另外,如果它們在java文件中,是否有可能從需要它們的XML文件中引用它們(例如,針對Google Maps API密鑰)?

+3

您在apk中分發的所有內容都是可讀的。只要把它放在資源/ java文件中,只要它是無價值的東西,如API密鑰。如果是你的信用卡號碼,請不要把它放在一邊。僅在XML IIRC中映射API密鑰工作 – zapl

+2

在ProGuard網站上,他們提到[DexGuard](http://www.saikoa.com/dexguard),它允許對靜態字符串(API密鑰)進行更好的混淆處理。如果投入一些錢並不是一個問題,檢查他們提供什麼可能是值得的麻煩。 – harism

回答

9

您的APK將從設備檢索和撕裂反正。 (畢竟,一些設備是根植的。)無論你在哪裏硬編碼,無論在哪裏,都會被發現並提取出來。當然,如果潛在收益證實了這一努力。否則,通過混淆等隱晦的安全措施可能是一條可行的路。

處理真正的祕密,應根據某種輸入,尤其是密碼。

令人高興的是,API密鑰,如果作爲他們應該,不一定是真正的祕密。

-3

,如果你只是想阻止其他應用程序訪問你的數據,你可以使用SharedPreferences。只需使用 Contex.getSharedPreferences(/ 偏好設置文件名 /,Context.MODE_PRIVATE); 根據文檔MODE_PRIVATE表示創建的文件只能由調用應用程序(或共享相同用戶ID的所有應用程序)訪問。

+0

這並不回答被問到的問題。提問者關心應用程序的分佈式資產,而不是存儲安裝後確定的信息。例如,一個分佈在'res/raw /'中的文件。 – Dallas

4

谷歌已經billing下這方面的一些好的建議。總結一下:使用遠程服務器,混淆並使用安全的隨機數。你的apk裏沒有東西是安全的,因爲它總是可以進行反向設計,混淆只適用於簡單的攻擊。

+2

如果你downvote請說明原因。謝謝 – Warpzit

相關問題