我正在尝试了解哪种方法是在Android中存储敏感数据的最佳方法。在我的应用程序中,我想插入一些硬币的经典应用程序内购买模型。我的问题是我不确定如何正确执行此操作。 最初的想法是简单地使用我的firebase数据库,为每个用户存储硬币数量,并在每次启动应用程序时获取数据。这样,我可以轻松检测到一些不当使用,但我的用户被迫使用互联网进行游戏。 通过查看文档,我发现this。这可以解决吗?是否可以在内部存储器中保存硬币数量(也许使用某种类型的加密),以避免root用户修改文件?然后,当互联网打开时,我可以使用数据库中的那个再次检查本地存储的变量。 谢谢
答案 0 :(得分:1)
这不是一项“简单”的任务。 从技术上讲,您可以创建一个SecretKey并加密数据,因此普通用户将无法复制。如果您关心的是root用户,那么您就很不走运,因为他可以在读取/写入该值时挂接到您的应用程序中。
但是,将其在线存储本身并不是解决方案。您必须回答以下问题:“您是否信任任何服务器输入”? “如何确保只添加了付费硬币”?
您看过Google Play billing吗?
它提供了确定某人是否付款的安全方法。 这将需要在线。
答案 1 :(得分:0)
如果您有敏感数据要保存,则可以使用sqlcipher数据库..它可以对数据库文件本身进行加密,因此即使root用户也能够获取数据库文件,他也将无法解密该文件。您使用安全的加密算法。 您可以在此处找到有关sqlcipher的更多信息 https://www.zetetic.net/sqlcipher/sqlcipher-for-android/
答案 2 :(得分:0)
由于我假设您将授予您的应用程序对您的敏感数据的读取权限,并且所有写入过程都应保留在服务器端,因此我不建议您将数据存储在手机上的文件中,尽管每种加密都可以通过
也许您已经听说过SharedPreferences
,这对于说用户选择的首选项是一个很好的解决方案,但这只会影响他特定的应用程序安装。区别在于,值不存储在外部文件中,因此不那么容易访问,但是您的应用需要编写它们,因为只有应用可以直接访问它们(服务器也不能)。我根本不知道如何使用您的敏感数据,但是由于SharedPreferences
易于插入,因此我也不会使用。
有关SharedPreferences的官方文档。
如果您的数据安全性(说保密性,完整性,身份验证)是您的第一要务,那么请不要将敏感数据存储在用户设备上。将更多精力放在创建一个API上,以确保安全高效地传递敏感数据的相关位。希望这有助于您了解该走哪条路。