NSUserDefaults或keychain最好在iPhone应用程序中保存用户名和密码

时间:2012-09-21 06:43:46

标签: iphone nsuserdefaults keychain

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

5 个答案:

答案 0 :(得分:16)

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

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

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

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

https://github.com/goosoftware/GSKeychain

我希望它可以帮到你!!

答案 1 :(得分:11)

注意即使您的应用被删除也会保留Keychain数据,但NSUserDefaults数据将随应用程序消失(NSUserDefaults是应用程序沙箱的一部分,Keychain是一个独立于应用程序的服务)。

答案 2 :(得分:6)

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

Keychain, on the other hand, is meant for stuff like certificates and passwords。我已经链接了一篇名为“如何不在iOS中存储密码”的文章,它也提供了更多有用的细节。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我建议你使用Keychains。 使用钥匙串,您可以以加密形式存储密码。看一下Apple的GenericKeychain样本。

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

您还可以将NSUserDefaults转换为Keychains。看一看 here