Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内部存储有多安全? 我需要的是:_Java_Android - Fatal编程技术网

Java 内部存储有多安全? 我需要的是:

Java 内部存储有多安全? 我需要的是:,java,android,Java,Android,对于Android:我需要永久保存数据,但也能够编辑(显然是读取)数据。此数据不应由用户访问-它可以包含诸如highscore之类的内容,用户不得编辑这些内容 我的问题 我本来会(而且已经)使用内部存储,但我不确定它到底有多安全。它说: 您可以将文件直接保存在设备的内部存储器上。通过 默认情况下,保存到内部存储器中的文件对用户是专用的 应用程序和其他应用程序无法访问它们( 用户)。当用户卸载应用程序时,这些文件将被删除 删除 这基本上正是我所需要的-但它真的安全吗?它可以通过根设备访问(也许只能

对于Android:我需要永久保存数据,但也能够编辑(显然是读取)数据。此数据不应由用户访问-它可以包含诸如highscore之类的内容,用户不得编辑这些内容

我的问题 我本来会(而且已经)使用
内部存储
,但我不确定它到底有多安全。它说:

您可以将文件直接保存在设备的内部存储器上。通过 默认情况下,保存到内部存储器中的文件对用户是专用的 应用程序和其他应用程序无法访问它们( 用户)。当用户卸载应用程序时,这些文件将被删除 删除

这基本上正是我所需要的-但它真的安全吗?它可以通过根设备访问(也许只能读取?)吗?(或任何其他方式?)

SQLite数据库或共享内存呢?它们是否更适合保存(少量)数据


另外:通常是否建议在内部以不同的方式处理“机密”数据?(比如不将其(内部)保存为整数/字符串,而是某种加密)

使用SharedReferences是您可能想要的。它将数据保存在/data/目录深处的XML文件中。除非手机具有root权限,否则用户或其他应用程序无法访问


不,这不安全,用户可以修改根设备和emulator上的文件。最好使用加密,但加密不是100%安全的,事实上有经验的极客可以破解你的加密。我建议将用户不应该访问或操纵的关键数据保存在Web服务器上,而不是用户的设备上

可以通过根设备访问(可能仅读取?)它吗

它可以读和写

它可以包含诸如highscore之类的内容,用户不能编辑这些内容

这是用户的数据,而不是您的。它是用户的设备,而不是您的设备。因此,只要用户的数据存储在设备上,用户就可以根据需要编辑该数据

现在,如果您想阻止其他人编辑该数据,那么使用用户提供的密码进行加密是一种合理的措施。这对于一场比赛的高分来说似乎是不必要的


否则,如果您不希望他们编辑该数据,请不要将其存储在他们的设备上。

如有疑问,请使用加密!这已经被问了很多次了。如果用户是根用户,他们可以查看/更改任何内容。如果你想让它更难,加密它。即使这样,你也必须把钥匙存放在某个地方,这样一个专门的人才能破解它。在一个有根设备上没有什么是安全的。根用户可以访问和修改任何文件、数据库等。。。即使是内存(但典型的用户也不知道如何使用)。加密有帮助,但高级用户可以反编译您的apk并提取加密部分。因此,唯一“真正”安全的存储选项将是设备本身以外的任何位置?(就像在Web服务器上一样——仍然不完全安全,但这是另一个话题)是的,基本上是对的。这取决于你想要多少安全感。如果只是为了个人高分列表,请选择内部/共享DPrefs。谁在乎用户是否编辑自己的分数?如果它出现在某个排行榜上,请将其存储在排行榜所在的任何位置(服务器)。共享首选项是否用作可从不同应用程序访问的存储选项?还是我只是误会了?我一开始也是这么想的。我认为它只能在软件包中使用。所以它可以像内部存储一样访问,只需使用xml而不是播放文本?对,但是android通过一个非常简单易用的API来处理这个问题。获取应用程序的SharedReferences实例,然后开始读取。或者,从SharedReferences实例获取编辑器,编写更改并提交编辑。很简单-我喜欢它!看看我给你的链接。是的,我读过,只是对访问不确定——但是对于简单的数据来说看起来很简单/酷。为什么是模拟器?只要我不分发.apk,就不应该“不可能”让它在模拟器上运行吗?(或者你可以在从Google Play下载时获得apk吗?)根用户可以从/data/app中提取apk。@benjaminschwalb请检查。如果它是某个阶梯上的全球高分,我甚至不会让用户编辑它。(这是欺骗,对其他人不公平)@BenjaminSchwalb:要么这是一个“全球高分”的本地副本(在这种情况下,用户编辑它就无关紧要了,而且在稍后的网络操作后,它会被你重写),或者你有一个非常奇怪的架构,某个随机用户碰巧持有你高分的主副本。高分只是一个例子——让我们以用户ID为例:我需要将它保存在本地的某个地方,并将它传递给DB,以了解要更新的用户——这也不能更改(它会自动分配一次,并且应该保持不变)——或者可能是一个配置文件,我在其中存储诸如“我为xy获得了多少分数/黄金/…我能得到多少分”之类的内容,这些内容也不能被编辑。(举个例子,可能有更好的方法来完成所有这些,但这并不是真正的问题)@BenjaminSchwalb:要么用户ID是用户已经知道的(因此与密码相关,用户无法更改其他帐户的密码),要么用户ID是50多个字符生成的字符串(因此从统计上讲,用户不太可能修改以获得有效值).至于“配置文件”,要么不在本地存储游戏规则,要么接受恶棍可以操纵这些规则的事实。因此答案仍然很简单:设备上没有任何东西是安全的,甚至代码也不安全