18

在我的 iphone 应用程序中,有一些机密数据,例如用户名、密码和一些网络服务的 url。哪一个更好 NSUserdefaults 或钥匙串。有人说 NSUserdefaults 不安全。为什么不安全?任何人都可以给出每种方法的优缺点。

4

5 回答 5

17

NSUserDefaults 非常易于使用,每个键只存储一个值。但显然,这不是一种非常安全的方法,因为没有加密。

但是钥匙串是安全的,尽管它有点难以编码。您可以参考这些链接以使用钥匙串访问。

http://log.scifihifi.com/post/55837387/simple-iphone-keychain-code

你也可以使用 Simon 设计的这个库

https://github.com/goosoftware/GSKeychain

希望对你有帮助!!

于 2012-09-21T06:51:15.157 回答
13

请注意,即使您的应用程序被删除,钥匙串数据仍将保留,但 NSUserDefaults 数据将随应用程序一起消失(NSUserDefaults 是应用程序沙箱的一部分,钥匙串是独立于应用程序的服务)。

于 2015-05-12T08:53:20.220 回答
7

NSUserDefaults 中存储的任何内容都可以(相对)轻松地打开和读取,无论是在设备上还是在(非加密)备份到 iCloud 或同步的 Mac 中。

另一方面,钥匙串适用于证书和密码之类的东西。我已经链接了一篇题为“如何不在 iOS 中存储密码”的文章,该文章也提供了更多有用的细节。

于 2012-09-21T06:47:19.623 回答
1

Keychain 是更好的解决方案,因为它更安全,但无论如何,如果您将此类信息保存到 NSUserDefaults 中,您的用户不会有任何不同。如果有人入侵他们的设备,他们可以从 Keychain 获取信息,就像从 UserDefaults 获取信息一样。所以这个安全问题是夸夸其谈。但无论如何,好的编程风格是将这些数据保存到 Keychain 中!

于 2012-09-21T06:47:34.260 回答
1

我建议您使用钥匙串。使用钥匙串,您可以以加密形式存储您的密码。看看 Apple 的GenericKeychain示例。

与 Keychain 相比,NSUserDefaults 的安全性稍差一些。在 NSUserDefaults 中,如果特定键已知,则可以轻松访问数据。这不是钥匙串的情况。

您还可以将 NSUserDefaults 转换为钥匙串。看看 这里

于 2012-09-21T06:52:09.640 回答