2013-09-26 46 views
8

我正在加密下载的文件,并将它们保存在应用程序的文档目录中。存储解密文件的位置?

读他们必须解密这些文件和临时存储一些地方。

我的担忧是:

1.如果我在doc目录中存放,以时间,他们正在使用,该时间窗口可以得到使用工具,如IEXPLORER这些文件。

2.我的想法是将它们存储在内存中,以便使用它们,并在使用后冲洗保管库。 这个选项适用于小文件,但对于大文件来说,50 MB或100 MB的视频,恐怕应用程序会收到内存警告,结果会突然终止。

我想知道这样做的最佳方法。

+2

以任何方式将文件拆分成块,以便您可以将一个加密块读入内存,并在那里解密它? –

+0

这可能是一个选项,但这不是一件容易的工作,对于某些文件在其页脚存储元数据或单击PDF页面上的链接时,这无济于事。您需要研究每种文件类型的文件结构以及读取它们的机制。 –

+0

这个问题没有完美的解决方案,但是即时解密是最安全的。有些方法可以在显示时即时解密视频,例如(虽然我不能很好地解释它们)。 –

回答

-1

对它们进行解密,使用玩具算法对它们进行模糊处理(例如,使用常量块的XOR),并将它们存储在文档中。在需要时加载和解密。

由于这个问题在理论上没有解决方案(一个足够确定的攻击者可以读取你的进程内存),它和任何解决方案一样好。

+0

对于大多数文件格式,将数据与“常量块”异或并不安全。 – duskwuff

+0

没有什么安全的是应用程序能够解密文件。这更像是混淆。 –

0

保存之前分裂您的文件转换成更小的尺寸,然后解密的负担。

后来编辑:我注意到这是在评论中提到。我同意分割文件不是世界上最简单的事情,但大概你只需要这个视频。大约100MB是很多文字或音频。如果您的PDF文件的权重很大,那么可能是扫描的文本,并且您可以将其更改为一系列图像。

是的,分裂更好的进行服务器端的,不希望在视频处理用户废旧电池。

+0

我不确定这是否可以使用iOS sdk完成,因为当媒体文件提供给AVPlayer或MPMoviePlayerController时,首先他们处理整个文件以了解其元数据。随着大块的字节,我将如何知道需要特定的块并在两者之间进行解密。 –

+1

这不是微不足道的,但这是你的服务器更适合做的事情:分割文件,并提供有关块偏移的信息。 –

+0

感谢您的建议ilya n –

1

还有没有完美的安全存储本地文件在安全的方式。如果一个人可以完全访问该设备,只要您的应用程序能够解密该文件,他总能找到解密文件的方法。

唯一的问题是:解密文件需要多少努力?

如果您唯一担心的是一个人可能会使用iExplorer复制并打开这些文件,那么简单的本地对称加密就可以解决这个问题。

只需在您的应用程序中嵌入一个随机对称密钥,并在您下载时逐块加密数据。

您可以使用舒适的“安全变换”框架做对称加密。 Apple Documentation中有一些很好的例子。

当加载文件时,您可以使用相同的密钥进行解密,而你从文件系统加载它们。

只是为了说清楚:这不是一个完美的保护的文件。但要解密这些文件,可以访问您的应用程序二进制文件。在调试器中分析此二进制文件并搜索解密部分以提取对称密钥。这是解密文件所需的很多努力。