如何使用加密保护Documents目录中的数据?

时间:2017-02-18 10:44:32

标签: ios swift security encryption

我有一个应用程序可以下载几个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 个答案:

答案 0 :(得分:0)

如果要编写解锁时无法访问的文件,则必须编写以下内容:

let filePath = "path/to/place"
let bar = "HII"
let fileAttr = [NSFileProtectionKey : NSFileProtectionComplete]
fileManager.createFile(atPath: filePath, contents: bar, attributes: fileAttr)

虽然解锁但仍然可以访问。如果人们真的想找到这些文件,他们会尝试很多方法来访问它们。

注意:此代码未经过测试

如果您想获得完整的保护,可以使用AES加密,然后在需要读取时进行解密,但会导致性能下降