在 iOS 中离线打开和存储加密文档
Posted
技术标签:
【中文标题】在 iOS 中离线打开和存储加密文档【英文标题】:Opening and storing encrypted documents offline in iOS 【发布时间】:2012-08-13 08:19:52 【问题描述】:我已下载加密文件,可在文件夹中离线查看,我想知道:
如何在适当的阅读器中打开它们,因为它们是 ms office docs 和 prezi 格式
我想它们必须是未加密的,以便读者可以阅读它们,但在这种情况下如何确保安全?
使用哪个文件夹来避免 iCloud 同步,我已经阅读了这个Disable iCloud sync
ios 是否通过基于应用程序密钥的加密来保护应用程序的文档,因为我阅读它还是我错了?
【问题讨论】:
【参考方案1】:即兴发言,随着想法的出现,Sven 对UIDocumentInteractionController
的看法是正确的,并且对象由 URL 标识。
但是,您可能不需要对磁盘上的文件进行解密即可使用。您可能可以编写自己的小 URL 协议(子类 NSURLProtocol
并适当地实现方法;您最终应该检查 URL 是否在您创建的发明方案中 - 例如 myApplicationEncrypted://
- 然后将数据包发送到 NSURLProtocolClient
) 并通过NSURLProtocol +registerClass
将其注册到设备。
您显然需要在磁盘和协议客户端之间进行解密。因此,您将传递未加密的数据——您需要对 UIDocumentInteractionController
做出信任判断。
文档交互控制器已记录在您的应用中工作,因此不应该存在沙盒问题。
【讨论】:
我不确定 NSURLClient 方法是否用于获取文档数据。但是,即使您即时解密数据,一旦其他应用程序可以访问数据,它就不再受到保护。您不能强制其他应用确保其安全。 @Sven 我非常有信心注册为NSURLProtocol
s 的东西总是处理URL 获取的东西。尽管这就是“思想发生时”的意思——这是一个尝试的想法,而不是我尝试过的想法。我想如果用户使用交互控制器尝试在另一个应用程序中打开,因为您的 NSURLProtocol
子类仅限于您的沙箱,那么会有问题。
UIDocumentInteractionController 没有通过自定义的 NSURLProtocol。您也不能使用非 file:// 方案,因为 UIDocumentInteractionController 会引发错误。我只成功使用了 UIWebView 及其 loadRequest、自定义方案 (mysecurestore://) 和响应该方案的自定义 NSURLProtocol。【参考方案2】:
您可以使用UIDocumentInteractionController 对象将您的文档发送到其他应用程序。您使用指向文档的文件 URL 对其进行初始化,然后使用其中一种方法来呈现它。
这将负责显示预览(如果可能)并让用户选择应在其中打开文档的应用程序。
文档必须被解密才能工作。然后,您无法对文件的安全性做出任何保证 - 一旦将其移交给另一个应用程序,您将无法控制。
如果您的应用没有明确选择使用 iCloud 同步,您的数据将不会与 iCloud 同步。发送到 iCloud 的是整个设备的备份(如果启用)。正如您在链接的问题中已经阅读的那样,有一些方法可以为单个文件禁用此功能。
iOS 文件保护基于设备密钥,而不是每个应用程序密钥。这也不是必需的,因为应用程序受到沙盒的相互保护,除非您的手机已越狱。在越狱的手机上没有安全保证。
【讨论】:
以上是关于在 iOS 中离线打开和存储加密文档的主要内容,如果未能解决你的问题,请参考以下文章