在 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 我非常有信心注册为NSURLProtocols 的东西总是处理URL 获取的东西。尽管这就是“思想发生时”的意思——这是一个尝试的想法,而不是我尝试过的想法。我想如果用户使用交互控制器尝试在另一个应用程序中打开,因为您的 NSURLProtocol 子类仅限于您的沙箱,那么会有问题。 UIDocumentInteractionController 没有通过自定义的 NSURLProtocol。您也不能使用非 file:// 方案,因为 UIDocumentInteractionController 会引发错误。我只成功使用了 UIWebView 及其 loadRequest、自定义方案 (mysecurestore://) 和响应该方案的自定义 NSURLProtocol。【参考方案2】:

您可以使用UIDocumentInteractionController 对象将您的文档发送到其他应用程序。您使用指向文档的文件 URL 对其进行初始化,然后使用其中一种方法来呈现它。

这将负责显示预览(如果可能)并让用户选择应在其中打开文档的应用程序。

文档必须被解密才能工作。然后,您无法对文件的安全性做出任何保证 - 一旦将其移交给另一个应用程序,您将无法控制。

如果您的应用没有明确选择使用 iCloud 同步,您的数据将不会与 iCloud 同步。发送到 iCloud 的是整个设备的备份(如果启用)。正如您在链接的问题中已经阅读的那样,有一些方法可以为单个文件禁用此功能。

iOS 文件保护基于设备密钥,而不是每个应用程序密钥。这也不是必需的,因为应用程序受到沙盒的相互保护,除非您的手机已越狱。在越狱的手机上没有安全保证。

【讨论】:

以上是关于在 iOS 中离线打开和存储加密文档的主要内容,如果未能解决你的问题,请参考以下文章

在 PWA 中离线时的图像存储

当用户在 quickblox 的 ios 中离线时获取消息

JS中离线应用与客户端存储

当设备在 react-native 中离线时,在 webview 中显示本地图像

在应用程序中离线同步的最佳想法

我可以使用 AppSync 预先缓存数据以在移动应用程序中离线工作吗?