Keychain 和 NSUserDefault 的区别?

Posted

技术标签:

【中文标题】Keychain 和 NSUserDefault 的区别?【英文标题】:Difference between Keychain and NSUserDefault? 【发布时间】:2012-08-23 11:03:03 【问题描述】:

我是objective C 的新手,我创建了一个应用程序,我同时使用了NSUserDefaultKeychain 来存储我的用户名和密码。但我无法区分两者。请帮助区分两者。

谢谢。

【问题讨论】:

这是一个非常明显的评论,只是为了简化您对钥匙串的理解。 Keychain 和 NSUserDefault 非常相似。对于这两者,您只需执行 设置 objectforKey 然后执行 ObjectForKey 来读取它 他们都存储哈希值。 Keychain 和 NSUserDefault 都将被沙盒化,但即使您的应用程序已卸载,keychain 也不会从内存中释放。下次安装时它仍然存在。还有一个适用于 iCloud 的钥匙串,可以在多个设备上使用,但那是另一回事 【参考方案1】:

钥匙串是一个加密容器,用于保存多个应用程序和安全服务的密码。 Apple Inc. 在 Mac OS 和 ios 中使用钥匙串作为密码管理系统。

NSUserDefaults 提供一种基于用户偏好的应用程序行为自定义方式。属于 Cocoa 和 Cocoa Touch 的 Foundation 框架。

我是从NSUserdefaults 和keychain 的标签信息中得到的

【讨论】:

【参考方案2】:

补充: 当我们保存用户名和密码时。并从设备中删除应用程序。

在钥匙串中:用户名和密码仍然存在。

在 NSUserDefaults 中:用户名和密码也会随您的应用从设备中删除。

【讨论】:

【参考方案3】:

尽量避免在本地保存数据。

Keychain- Keychain 是一种安全且加密的方式来保存用户名、密码等小型存储数据。 当心钥匙串数据可以从越狱设备访问。 您可以从here 获取 Apple 示例代码。

Keychain Sharing- 启用钥匙串共享允许您的应用与您团队开发的其他应用共享钥匙串中的密码。 假设我们创建了两个应用程序,用户可以在其中登录同一个帐户。如果能够在这些应用程序之间共享登录信息,那就太好了。这样,用户只需在其中一个应用中登录一次。

UserDefaults 用户默认数据库的接口,您可以在给定设备上跨应用程序调用持久存储键值对。 UserDefaults 不是保存私人数据的安全方式。 UserDefaults 在本地存储为 plist, 任何人都可以在 ./Library/Preferences/com.mycompany.MyAppName.plist 中跟踪

【讨论】:

您建议尽可能避免在本地保存数据的理由是什么?什么是替代方案,将数据存储在云中?云服务上的敏感数据是否比本地 iOS 设备上的更安全? @Eugene 数据无处安全。这一切都与我们提供多少安全层有关。至少您应该检查加密技术。但是硬编码(本地副本)很容易跟踪,我已经在答案中解释了:)

以上是关于Keychain 和 NSUserDefault 的区别?的主要内容,如果未能解决你的问题,请参考以下文章

基于sqlite数据库

基于sqlite数据库

写入 NSUserDefault 和 .plist 失败

NSUserDefault 无法在 iOS8 的扩展中保存和加载

Swift 问题 - NSUserDefault 和 Settings Bundle 没有响应

我可以根据另一个 NSUserDefault 值保存 NSUserDefault 值吗?