在我的 iphone 应用程序中,有一些机密数据,例如用户名、密码和一些网络服务的 url。哪一个更好 NSUserdefaults 或钥匙串。有人说 NSUserdefaults 不安全。为什么不安全?任何人都可以给出每种方法的优缺点。
5 回答
NSUserDefaults 非常易于使用,每个键只存储一个值。但显然,这不是一种非常安全的方法,因为没有加密。
但是钥匙串是安全的,尽管它有点难以编码。您可以参考这些链接以使用钥匙串访问。
http://log.scifihifi.com/post/55837387/simple-iphone-keychain-code
你也可以使用 Simon 设计的这个库
https://github.com/goosoftware/GSKeychain
希望对你有帮助!!
请注意,即使您的应用程序被删除,钥匙串数据仍将保留,但 NSUserDefaults 数据将随应用程序一起消失(NSUserDefaults 是应用程序沙箱的一部分,钥匙串是独立于应用程序的服务)。
NSUserDefaults 中存储的任何内容都可以(相对)轻松地打开和读取,无论是在设备上还是在(非加密)备份到 iCloud 或同步的 Mac 中。
另一方面,钥匙串适用于证书和密码之类的东西。我已经链接了一篇题为“如何不在 iOS 中存储密码”的文章,该文章也提供了更多有用的细节。
Keychain 是更好的解决方案,因为它更安全,但无论如何,如果您将此类信息保存到 NSUserDefaults 中,您的用户不会有任何不同。如果有人入侵他们的设备,他们可以从 Keychain 获取信息,就像从 UserDefaults 获取信息一样。所以这个安全问题是夸夸其谈。但无论如何,好的编程风格是将这些数据保存到 Keychain 中!
我建议您使用钥匙串。使用钥匙串,您可以以加密形式存储您的密码。看看 Apple 的GenericKeychain示例。
与 Keychain 相比,NSUserDefaults 的安全性稍差一些。在 NSUserDefaults 中,如果特定键已知,则可以轻松访问数据。这不是钥匙串的情况。
您还可以将 NSUserDefaults 转换为钥匙串。看看 这里。