安全的图像存储Android

时间:2011-11-22 18:30:42

标签: android database image security sd-card

我正在为Android 2.2开发一个应用程序,允许用户从Web服务器购买和下载图像。一旦他下载这些图像,只有这个应用程序应该能够查看这些图像。我能想到的一种可能的方法是加密并保存SD卡中的图像。

但是,我担心的是,即使加密后,这些文件也会显示在文件浏览器应用程序中(可以删除/重命名/移动文件)。是否可以将这些文件存储在SD卡中,使其对其他应用程序不可见?

BlackBerry中有一个前向锁定功能(http://www.blackberry.com/developers/docs/4.5.0api/net/rim/device/api/io/file/ExtendedFileConnection.html)。一旦文件使用这种方法保存到SD卡上,它只对相应的应用程序和设备可见。是否有类似于android的东西?

将图像存储在sqlite数据库中是否可取。手机中的其他应用程序看不到数据库文件。(PS:会有大量图像)

是否可以将图像文件另存为.asec文件。是否有任何api将文件转换为.asec格式?我理解。文件浏览器不会显示.asec文件。

请您指点我或为此方案提出理想的解决方案。

5 个答案:

答案 0 :(得分:2)

作为应用开发者,您是用户设备上的访客。用户对设备的控制力比以往任何时候都多。没有地方可以隐藏加密所需的密钥。你被迫玩得很好,也许你正在寻找“(安全)虽然默默无闻”。

答案 1 :(得分:2)

有一种解决方案可以将数据存储在SD卡上,使得无法在非根电话上的设备文件查看器中查看文件。

解决方案是将数据保存在应用数据文件夹中,并激活清单中应用的自动位置选择。这允许用户选择将应用程序保存在外部或内部的位置,并且所有图像都在应用程序拥有的私有文件夹中。

只有一个缺点。用户可以通过应用程序管理器删除所有文件。她将被警告说这可能会破坏应用程序,但如果没有办法重新下载图像,如果应用程序被删除或用户认为删除应用程序数据是一件好事,用户将丢失所有购买的项目。

在root手机上,可以将图像从私人文件夹中复制出来。因此,您应该考虑以某种方式加密图像。然而,加密并不容易,因为用户总是可以尝试从源代码或网络流量中提取加密密钥。

答案 2 :(得分:1)

您可以将文件存储在数据库中,除非数据库大小有限制。

或者您可以将图像存储在一个容器中(例如我们的SolFS虚拟文件系统)并从该容器中提取它们。用户仍然可以将容器复制出去。这里的选项之一是使用某些设备ID(例如IMEI代码)加密容器作为加密密钥的一部分。

如果手机已植根,那么用户几乎可以做任何事情,就像鲁克指出的那样,默默无闻成为这个等式的重要组成部分。

另一种选择是为图像创建自定义文件格式,以便只有您的应用程序才能加载图像数据。同样,您可以使用设备ID对这些文件进行加密,以将图像“绑定”到设备上。

请注意,现在知识产权(包括图片)已授权给用户,而不是设备。或者至少用户有权在他的几个系统之间移动IP(比如不超过3个设备)。您也可以通过使用随机密钥加密图像来处理此问题,然后使用IMEI + salt为每个设备加密随机密钥(因此您将对随机密钥加密说3次)。然后用户可以在他的系统之间移动文件。当然,这不是让用户在他的设备之间移动文件的唯一方法。

答案 3 :(得分:0)

您可以将图片包装到一个文件中,然后将其加密并对其他程序无用,然后在您的应用中解密图像文件并显示它。其他技术在存储在SD上时会插入水印,然后在程序中显示时删除水印。

答案 4 :(得分:0)

您可以加密图像文件,然后将其保存在SD卡中。这不会阻止用户定位/复制/删除文件。您可以使用File类并使用File.setReadOnly(),但我认为它需要root访问权限。在任何情况下,用户都将拥有与您的应用相同的权限。

最安全的方法是创建完整的在线查看器。

相关问题