我需要在 Android 应用程序中存储一些敏感信息。如果我将它放在资源文件中,似乎另一个应用程序只需使用PackageManager.getResourcesForApplication()就可以浏览和读取该文件是微不足道的。
在哪里放置我们不希望人们能够轻易窥探的此类信息的正确位置?
它应该在编译的java文件中吗?还是类文件也易于阅读?此外,如果它们在 java 文件中,是否可以从需要它们的 XML 文件中引用它们(例如,对于 google maps api 密钥)?
我需要在 Android 应用程序中存储一些敏感信息。如果我将它放在资源文件中,似乎另一个应用程序只需使用PackageManager.getResourcesForApplication()就可以浏览和读取该文件是微不足道的。
在哪里放置我们不希望人们能够轻易窥探的此类信息的正确位置?
它应该在编译的java文件中吗?还是类文件也易于阅读?此外,如果它们在 java 文件中,是否可以从需要它们的 XML 文件中引用它们(例如,对于 google maps api 密钥)?
无论如何,您的 APK 将从设备中检索并撕裂。(毕竟,有些设备是有根的。)无论你在哪里硬编码,无论在哪里,都将被找到并提取。当然,如果潜在的收益证实了这种努力。否则,通过模糊来实现安全性,例如混淆,可能是要走的路。
处理真正的秘密应该基于某种输入,尤其是密码。
令人高兴的是,API 密钥,如果按预期使用,不一定是真正的秘密。
Google 在billing下对此有一些很好的建议。总结一下:使用远程服务器,混淆并使用安全随机数。在你的 apk 中没有什么是安全的,因为它总是可以被逆向工程,并且混淆只适用于简单的攻击。
如果您只想拒绝其他应用程序访问您的数据,您可以使用 SharedPreferences。只需使用 Contex.getSharedPreferences(/ prefs 文件名/, Context.MODE_PRIVATE); 根据文档 MODE_PRIVATE 意味着创建的文件只能由调用应用程序(或共享相同用户 ID 的所有应用程序)访问。