如何确保应用数据的完整性?

时间:2013-08-07 20:17:59

标签: java android data-binding data-integrity

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

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

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

如果没有,你能否建议一种方法在onDestroy()的{​​{1}}方法中为文件添加数字签名,以及检查文件中是否有签名的方法(s )与应用程序所做的匹配(虽然它也会被保存到文件中,可能是MainActivity)?

1 个答案:

答案 0 :(得分:3)

  

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

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

  

然而,是否有一种方法可以添加数字签名或应用程序可以在启动时检查的内容?

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

  

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

普通用户将无法访问内部存储上的文件。根设备的用户可以选择访问内部存储。

  

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

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

对于您未修改但仅仅是下载的文件,您可以为服务器上创建的文件创建数字签名(其中包含私钥)。然后,您的应用程序只需要公钥即可验证签名。但是,如果您的应用正在修改文件,则此功能无效。