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