1

我知道 Android 在创建文件时支持 MODE_PRIVATE 标志,因此其他应用程序无法访问它,但是有没有办法像添加数字签名或应用程序可以在启动时检查的东西?

我正在开发一个作为在线服务支持功能的应用程序,因此它能够从运行该服务的服务器下载数据。但是,这应该在使用应用程序之前执行,并且仅当设备上的数据与最新数据(保存在服务器上)不同时才执行。

我最初的想法是检查文件大小是否匹配或它们最后修改的日期。因此,如果我FileOutputStream在打开文件进行写入时使用 a 并设置标志 MODE_PRIVATE,这会阻止用户从文件管理器或任何其他应用程序访问/删除文件吗?

如果不是,您能否建议一种在 的方法中向文件添加数字签名的onDestroy()方法,MainActivity以及检查文件中的签名是否与应用程序所做的签名匹配的方法(尽管这会'也被保存到一个文件中,也许sharedpreferences.xml)?

4

1 回答 1

3

我知道 Android 在创建文件时支持 MODE_PRIVATE 标志,这样其他应用程序就无法访问它

这是内部存储的默认行为。

但是有没有办法像添加数字签名或应用程序可以在启动时检查的东西?

欢迎您为文件创建数字签名。欢迎任何修改文件的人修改数字签名。

这会阻止用户从文件管理器或任何其他应用程序访问/删除文件吗?

普通用户将无法访问内部存储上的文件。如果他们愿意,root 设备的用户可以访问内部存储。

如果不是,您能否建议一种在 MainActivity 的 onDestroy() 方法中向文件添加数字签名的方法,以及一种检查文件中的签名是否与应用程序生成的签名匹配的方法(虽然这也会被保存到一个文件中,也许是 sharedpreferences.xml)?

那将毫无用处,因为修改文件的人可以将签名修改为有效。毕竟,您的应用程序是进行签名的人,因此私钥必须存在于应用程序或设备上,这意味着任何可以获取文件的人都可以获取密钥。

对于您没有修改而只是下载的文件,您可以对在服务器上创建的文件进行数字签名(其中保存有私钥)。然后,您的应用程序只需要公钥来验证签名。但是,如果您的应用正在修改文件,这将不起作用。

于 2013-08-07T20:30:25.560 回答