使用第三方应用程序打开运行时解密文件,而不存储解密数据

时间:2013-04-23 12:07:46

标签: android security android-intent android-contentprovider

在我的应用程序中,我需要将动态解密的文件传递给第三方应用程序,而不将其保存到设备。

示例:我有一个自己创建的加密文件,其中包含pdf文件和一些要求,然后才能显示pdf文件。如果所有要求都是真的,则该pdf文件应由第三方PDF阅读器显示。

所以我需要开始一个新的意图,但是有问题。我必须提供我的pdf文件的URI,但我没有URI,因为我没有将文件保存到设备。

我有什么方法可以完成这项工作吗?

2 个答案:

答案 0 :(得分:2)

对于非常小的PDF或使用某种流加密算法加密的PDF,您可以创建管道ContentProvider。使用管道,您基本上将数据倾注到OutputStream,而另一方使用UriContentResolver来检索相应的InputStream

然而,如果你不能以流方式处理它,那么堆空间的限制将严重限制文件的大小(例如,当你从HTTP中读取字节时,在运行中解密并将解密的字节传递给OutputStream)。

Here is a sample创建了这样的ContentProvder

答案 1 :(得分:1)

回答我自己的问题:

与CommensWare(和sample code)和this link的答案一起,我找到了一个半解决方案。

示例代码向您展示了如何使用内容提供程序使其他应用程序可以访问本地文件。 第二个链接描述了删除方法的实现,该方法甚至在第三方应用程序完全打开之前就从文件结构中删除文件(并解释了为什么这样做)。

所以基本上,在解密之后,您创建一个可从内容提供商访问的文件,用另一个应用程序打开它并立即删除它。

对于有根电话,这仍然不是100%的解决方案,因为它们可以监控本地文件结构更改,并在创建文件后立即复制该文件。