【发布时间】:2011-08-02 17:49:58
【问题描述】:
我想保存诸如用户 ID 和密码之类的内容以及其他类似的内容(属性), 直到现在我都是用 plist 做的,但我知道 plist 可以从 iTunes 和类似的东西访问,所以还有其他方法可以保存这样的东西吗?
【问题讨论】:
标签: iphone objective-c
我想保存诸如用户 ID 和密码之类的内容以及其他类似的内容(属性), 直到现在我都是用 plist 做的,但我知道 plist 可以从 iTunes 和类似的东西访问,所以还有其他方法可以保存这样的东西吗?
【问题讨论】:
标签: iphone objective-c
您应该使用Keychain Services。
【讨论】:
如果您想存储用户名/密码值,最好将它们存储在Keychain 中。可以在blog entry 中找到如何执行此操作的一个示例。
【讨论】:
没有一种简单的方法可以专门在应用程序退出时加密数据。如果您需要始终在磁盘上加密所有内容,钥匙串服务是唯一的选择。
不过,iOS 也支持数据保护。如果用户在设备上设置了密码,则应用程序的文件可以由设备自动加密。这称为“文件保护”,有多种可用选项。例如,NSDataWritingFileProtectionComplete 选项将导致文件完全加密,除非设备未解锁。如果有人不知道设备的密码,他们将根本无法访问这些文件。
要使用此 API,请使用您要写入的文件的内容创建一个 NSData。然后传递文件保护选项如下:
NSData *theData;
NSError *error;
[theData writeToURL:someURL
options:NSDataWritingFileProtectionComplete
error:&error];
如果您只是保存用户名/密码信息,您应该将密码存储在钥匙串中。用户名将是您检索密码的密钥,因此您需要将其存储在其他地方。您可以使用上面详述的文件保护来为用户名添加某种程度的保护,但它不如钥匙串安全。
【讨论】:
核心数据可能是一个很好的解决方案,我不认为任何人都可以访问核心数据,无论如何都不容易。
【讨论】:
sqlite3 命令读取它。当然,您必须先找到文件,并且数据的名称可能不够直观,但这肯定不安全。使用钥匙串服务会更好。
这是一个在您的 App Delegate 中使用 applicationWillTerminate 的教程。虽然它不使用 KeyChain 服务,但您需要添加它。它使用的是 plist。
http://servin.com/iphone/iPhone-Save-and-Restore-Mini-Course.html
【讨论】:
applicationWillTerminate。