【问题标题】:Converting NSUserDefaults to Keychain?将 NSUserDefaults 转换为钥匙串?
【发布时间】:2011-02-21 14:12:22
【问题描述】:

所以,NSUserDefaults 很容易使用。但显然,它并不太安全——没有加密。当然,客户希望应用偏好是安全的,因为它包含敏感数据。

但是钥匙串是安全的,虽然很难编码(显然)。那么有没有办法轻松地将 NSUserDefaults 代码转换为 Keychain 代码?换句话说,我想将应用程序首选项存储在钥匙串中。还是我找错树了?

【问题讨论】:

    标签: iphone objective-c preferences nsuserdefaults keychain


    【解决方案1】:

    使用 PDKeychainBindings 库非常简单。 Here 是我最近写的一篇文章。 示例代码

    而不是这个

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

    使用这个

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

    【讨论】:

      【解决方案2】:

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

      // 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"];
      

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

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

        对于 Mac OS X

        您可以尝试以友好的方式包装钥匙串的EMKeyChain 库。如果你需要存储密码,就像 NSUserDefaults 一样简单。

        对于 iPhone

        有一个简单的包装器:Simple iPhone Keychain Code

        【讨论】:

        • 我认为 iPhone 上的钥匙串与 OS X 上的有点不同,所以我不确定它是否会起作用。你使用成功了吗?
        • 你是对的;有些功能没有暴露。我已更新答案以指向适用于 iPhone 的钥匙串包装器。
        • 谢谢 - 你知道 SciFi 代码是否可以用于存储不只是用户名和密码的项目吗?
        • 不了解 SciFi 代码,但 Apple API 允许存储证书、密钥等;所以应该不会那么难扩展。
        猜你喜欢
        • 1970-01-01
        • 2013-05-23
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        相关资源
        最近更新 更多