我需要在Documents Directory中保护我的数据,因此我使用了Apple Data Protection API。 Apple Asset
我使用NSDataProtectionKey
编写文件[data writeToFile:imagePath options:NSDataWritingFileProtectionComplete error:nil];
文件已成功写入
我获得了文件属性
[[NSFileManager defaultManager] attributesOfItemAtPath:fullPath
error:NULL];
它会返回这样的属性,因为你可以看到NSFileProtectionKey是NSFileProtectionComplete
NSFileCreationDate = "2013-01-22 06:10:48 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 501;
NSFileGroupOwnerAccountName = mobile;
NSFileModificationDate = "2013-01-22 06:10:48 +0000";
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = mobile;
NSFilePosixPermissions = 420;
NSFileProtectionKey = NSFileProtectionComplete;
NSFileReferenceCount = 1;
NSFileSize = 8964;
NSFileSystemFileNumber = 335997;
NSFileSystemNumber = 16777218;
NSFileType = NSFileTypeRegular;
我确信我已成功写入文件并成功读取该文件。但是当我在iExplorer(Mac的外部iOS设备阅读器应用程序)中打开此设备时,它会向我显示未加密的文件。
没有加密意味着我会写一个图像文件。但我能够在iExplorer中查看该图像(在文档目录中)。但我的目的是加密它。因为我不希望用户看到这些文件。我知道其他加密AES算法。但是想知道为什么Data Protection API不起作用。
注意:我使用iPad2 iOS 6.0.1和 记录在设备中的日志
答案 0 :(得分:10)
但是想知道为什么Data Protection API不起作用。
它确实有效,你只是期望的比它更多。
适用于文件的加密iOS对用户区中的任何内容都是透明的。加密是在硬件级别完成的,因此窃取设备闪存的任何人都无法访问数据。但是,如果屏幕已解锁且设备已打开,则操作系统将像处理所有其他文件一样处理这些文件,并且它们似乎不会从文件系统中“加密”。
如果你想这样做,你必须使用一些非对称加密方法对文件进行编码,例如AES(OpenSSL或GnuTLS可以很好地完成工作)。