如何通过加密保护 Documents 目录中的数据?
Posted
技术标签:
【中文标题】如何通过加密保护 Documents 目录中的数据?【英文标题】:How to protect data in Documents directory with encryption? 【发布时间】:2017-02-18 10:44:31 【问题描述】:我有一个应用程序可以下载几个 pdf 和图像并将它们保存在 Documents
目录中。我需要每个尝试通过 iExplorer 等工具访问它们的人保护这些文件。我找到了 ios 安全指南并启用了 Data Protection
功能。然后我尝试以这种方式创建一个txt文件:
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!
let filePath = documentsPath + "/hello.txt"
FileManager.default.createFile(atPath: filePath, contents: Data.init(base64Encoded: "HELLOOOOOOOO"), attributes: [kCFURLFileProtectionKey as String: FileProtectionType.complete])
然后,我尝试使用 iExplorer 访问 txt 文件,并且能够像访问任何其他不受保护的文件一样进行访问。我确实让我的 iPhone 解锁并锁定,等待了 5 分钟。这些文件可以毫无问题地访问。我真的需要知道是否有办法让它们无法访问,至少在设备被锁定时是这样。
我正在考虑的另一个解决方案是使用自定义算法加密 Documents 文件夹中的文件,但是这样在大文件的情况下,我们会失去打开文件的速度,因为每次我们需要解密它,这需要取决于文件本身大小的时间量。
建议?
【问题讨论】:
【参考方案1】:如果要写入解锁后无法访问的文件,则必须编写以下内容:
let filePath = "path/to/place"
let bar = "HII"
let fileAttr = [NSFileProtectionKey : NSFileProtectionComplete]
fileManager.createFile(atPath: filePath, contents: bar, attributes: fileAttr)
解锁后仍然可以访问。如果人们真的想找到这些文件,他们会尝试很多方法来访问它。
注意:此代码未经测试
如果想要有完整的保护,可以用AES加密,需要读取的时候再解密,但是会导致性能损失
【讨论】:
我正在文档目录中创建一个文件夹,然后存储文件。所以我在创建新目录时添加了fileAttr
属性。但是,当我导航到该文件夹时,我仍然可以访问这些文档。 let fileAttr = [FileAttributeKey.protectionKey : FileProtectionType.complete] try FileManager.default.createDirectory(atPath: dirPath.path, withIntermediateDirectories: true, attributes: fileAttr)
以上是关于如何通过加密保护 Documents 目录中的数据?的主要内容,如果未能解决你的问题,请参考以下文章