Iphone 是否将默认值转换为密钥链?

Iphone 是否将默认值转换为密钥链?,iphone,objective-c,preferences,nsuserdefaults,keychain,Iphone,Objective C,Preferences,Nsuserdefaults,Keychain,因此,NSUserDefaults非常易于使用。但显然,它并不太安全——没有加密。当然,客户端希望应用程序prefs是安全的,因为它包含敏感数据 但是钥匙链是安全的,尽管很难编码(显然)。那么,有没有一种方法可以轻松地将NSUserDefaults代码转换为钥匙链代码?换句话说,我想在钥匙链中存储app pref。还是我找错了方向?以下两种解决方案都是围绕KeyChain API的包装。通过在NSUserDefaults类别中使用它们,您可以以干净的方式访问和存储密码 适用于Mac OS X 您

因此,NSUserDefaults非常易于使用。但显然,它并不太安全——没有加密。当然,客户端希望应用程序prefs是安全的,因为它包含敏感数据


但是钥匙链是安全的,尽管很难编码(显然)。那么,有没有一种方法可以轻松地将NSUserDefaults代码转换为钥匙链代码?换句话说,我想在钥匙链中存储app pref。还是我找错了方向?

以下两种解决方案都是围绕KeyChain API的包装。通过在NSUserDefaults类别中使用它们,您可以以干净的方式访问和存储密码

适用于Mac OS X 您可以尝试使用友好方式包装钥匙链的库。如果您需要存储密码,它与NSUserDefaults一样简单

对于iPhone 有一个简单的包装器:。

对于iOS(可能还有OSX),您可以使用我的库。示例用法:

// Store a secret
[[GSKeychain systemKeychain] setSecret:@"t0ps3kr1t" forKey:@"myAccessToken"];

// Fetch a secret
NSString * secret = [[GSKeychain systemKeychain] secretForKey:@"myAccessToken"];

// Delete a secret
NSString * secret = [[GSKeychain systemKeychain] removeSecretForKey:@"myAccessToken"];

希望这有帮助

使用PDKeychainBindings库实现这一点非常简单。 这是我最近写的一篇关于它的文章。 示例代码

而不是这个

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[[Model sharedModel] currentUser] setAuthToken:[defaults objectForKey:@"authToken"]];
用这个

PDKeychainBindings *bindings = [PDKeychainBindings sharedKeychainBindings];
[[[Model sharedModel] currentUser] setAuthToken:[bindings objectForKey:@"authToken"]];

我认为iPhone上的钥匙链与OSX上的有点不同,所以我不确定它是否能工作。你成功地使用了它吗?你是对的;有些函数没有公开。我已经更新了答案,指向一个适用于iPhone的密钥链包装器。谢谢-你知道Scfi代码是否可以用来存储不仅仅是用户名和密码的项目吗?我不知道Scfi代码,但Apple API允许存储证书、密钥等;所以它应该不难扩展。