我正在加密下载的文件并将它们本地保存在应用程序的文档目录中。
要阅读它们,您必须解密这些文件并临时存储一些文件。
我的担忧是:
1.如果我将它们存储在 doc 目录中以供使用它们,那么对于那个时间窗口,可以使用 iExplorer 之类的工具获取这些文件。
2.我的想法是在使用时将它们存储在内存中,并在使用后刷新保险库。 此选项适用于小文件,但对于 50 MB 或 100 MB 的大文件,恐怕应用程序会收到内存警告,结果会突然终止。
我想知道这样做的最佳方法。
我正在加密下载的文件并将它们本地保存在应用程序的文档目录中。
要阅读它们,您必须解密这些文件并临时存储一些文件。
我的担忧是:
1.如果我将它们存储在 doc 目录中以供使用它们,那么对于那个时间窗口,可以使用 iExplorer 之类的工具获取这些文件。
2.我的想法是在使用时将它们存储在内存中,并在使用后刷新保险库。 此选项适用于小文件,但对于 50 MB 或 100 MB 的大文件,恐怕应用程序会收到内存警告,结果会突然终止。
我想知道这样做的最佳方法。
没有完美的安全性以安全的方式存储本地文件。如果一个人拥有设备的完全访问权限,他总能找到解密文件的方法,只要您的应用程序能够解密它。
唯一的问题是:解密文件需要多少努力?
如果您唯一担心的是有人可能会使用 iExplorer 来复制和打开这些文件,那么简单的本地对称加密就可以解决问题。
只需在您的应用程序中嵌入一个随机对称密钥,并在下载时逐块加密数据。
您可以使用舒适的“安全转换”框架来进行对称加密。Apple 文档中有一些很好的示例。
加载文件时,可以在从文件系统加载文件时使用相同的密钥来解密它们。
只是说清楚:这不是对文件的完美保护。但是要解密文件,可以访问您的应用程序二进制文件。在调试器中分析此二进制文件并搜索解密部分以提取您的对称密钥。仅解密文件就需要付出很多努力。
在保存之前将文件拆分成更小的尺寸,然后在加载时解密。
稍后编辑:我注意到评论中提到了这一点。我同意拆分文件并不是世界上最简单的事情,但大概你只需要这个视频。大约 100MB 是很多文本或音频。如果您的 PDF 很重,它可能是扫描文本,如果图像,您可以将其更改为系列。
是的,最好在服务器端进行拆分,不希望用户在视频处理中浪费电池。
解密它们,用玩具算法混淆它们(例如用一个常数块进行异或),并将它们存储在文档中。需要时,加载和解密。
由于该问题在理论上没有解决方案(一个足够坚定的攻击者毕竟可以读取您的进程内存),因此它与任何解决方案一样好。