【问题标题】:Saving private data securely on device when user exits application用户退出应用程序时在设备上安全保存私人数据
【发布时间】:2011-08-02 17:49:58
【问题描述】:

我想保存诸如用户 ID 和密码之类的内容以及其他类似的内容(属性), 直到现在我都是用 plist 做的,但我知道 plist 可以从 iTunes 和类似的东西访问,所以还有其他方法可以保存这样的东西吗?

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    您应该使用Keychain Services

    【讨论】:

      【解决方案2】:

      如果您想存储用户名/密码值,最好将它们存储在Keychain 中。可以在blog entry 中找到如何执行此操作的一个示例。

      【讨论】:

        【解决方案3】:

        没有一种简单的方法可以专门在应用程序退出时加密数据。如果您需要始终在磁盘上加密所有内容,钥匙串服务是唯一的选择。

        不过,iOS 也支持数据保护。如果用户在设备上设置了密码,则应用程序的文件可以由设备自动加密。这称为“文件保护”,有多种可用选项。例如,NSDataWritingFileProtectionComplete 选项将导致文件完全加密,除非设备未解锁。如果有人不知道设备的密码,他们将根本无法访问这些文件。

        要使用此 API,请使用您要写入的文件的内容创建一个 NSData。然后传递文件保护选项如下:

        NSData *theData;
        NSError *error;
        [theData writeToURL:someURL
                    options:NSDataWritingFileProtectionComplete
                      error:&error];
        

        如果您只是保存用户名/密码信息,您应该将密码存储在钥匙串中。用户名将是您检索密码的密钥,因此您需要将其存储在其他地方。您可以使用上面详述的文件保护来为用户名添加某种程度的保护,但它不如钥匙串安全。

        【讨论】:

        • 当我想读取我保存的数据时,我可以毫无问题地从我的应用程序中读取它?
        • 可以,只要设备已解锁。 (如果您使用后台执行 API 并且在设备锁定时在后台运行,那么您此时将无法访问该文件。)
        【解决方案4】:

        核心数据可能是一个很好的解决方案,我不认为任何人都可以访问核心数据,无论如何都不容易。

        【讨论】:

        • 错了。当您将手机同步到计算机时,所有数据都将复制到计算机上。此时,您的 Core Data 存储只是一个 SQLite 文件,您可以在命令行使用 sqlite3 命令读取它。当然,您必须先找到文件,并且数据的名称可能不够直观,但这肯定不安全。使用钥匙串服务会更好。
        【解决方案5】:

        这是一个在您的 App Delegate 中使用 applicationWillTerminate 的教程。虽然它不使用 KeyChain 服务,但您需要添加它。它使用的是 plist。

        http://servin.com/iphone/iPhone-Save-and-Restore-Mini-Course.html

        【讨论】:

        • 在应用退出时加密不是很安全。不保证在所有情况下都会调用applicationWillTerminate
        猜你喜欢
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 2013-09-05
        • 2017-06-24
        • 1970-01-01
        • 2013-12-22
        相关资源
        最近更新 更多