使用KeyChain在iOS中存储数百个值的缺点

时间:2016-12-27 22:06:53

标签: ios swift sprite-kit keychain

我希望在Swift中开发一款具有以下潜在要求的游戏:

  1. 可以离线播放
  2. 它提供了从其他设备保存和重新加载的功能
  3. 游戏可以访问布尔数据值,以确定玩家是否已解锁游戏中的等级,以及他们购买了什么(他们拥有多少金币,物品解锁等)。
  4. 数据不能被篡改(我不希望有人在没有正确购买的情况下给自己打金或解锁强武器)
  5. 我认为KeyChain是一个很好的方法,原因如下:

    1. 我可以将数据存储为键/值对并离线访问它们(非常适合我的真/假值,以解锁哪些级别/项目)
    2. 整个数据集可以导出为名称/值对,因此我可以使用CloudKit / GameCenter将整个字典(只需几行代码)发送到用户的帐户,然后将其同步到其他用户设备(通过导入该数据)。
    3. 它提供非常强大的安全性
    4. 使用KeyChain作为穷人的数据库感觉很奇怪,但由于上述原因,我列出了我觉得它可行。

      问题是我可以看到名称/值对在200-300范围内。你会说在KeyChain中存储这么多的值是一个错误的决定吗?它似乎并不特别缓慢。

      我的替代方案是使用数据库,但是这些值中的许多只是真/假(解锁的级别,解锁的剑1,解锁的3级,获得的总黄金等)。我认为游戏可能会突然变得过于强大而无法使用KeyChain来管理所有这些(而是我使用SQLCipher加密数据库)但是我想询问社区关于在KeyChain中存储这么多值的意见。

      谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将信息存储在plist,csv或数据库或文档目录中的任何其他类型的文件中并加密。将密钥存储在钥匙串中并使用密钥解密文件。有很多cryptography pods将为你做这部分,所以你不必处理C interop和共同加密的乐趣。