cocoa - 保存用户的硬币数量

标签 cocoa encryption persistence

虽然我的应用不是游戏,但基于硬币的游戏是一个很好的类比。

在这样的游戏中,用户可以通过玩游戏或购买 IAP 来赚取一定数量的硬币。主要问题是安全地存储用户在本地拥有多少硬币。

我知道还有其他类似的问题,例如this 。这个答案基本上是说,尝试安全地保存数据是没有用的;只需处理用户可以编辑数据的事实即可。

我不想只是将数据公开供用户更改(如果他们可以编辑数据,他们为什么要购买 IAP?)。我研究了 Keychain,它有一个公共(public)界面来查看和编辑数据,以及 NSUserDefaults,它保存到可以轻松更改的 Plist。

对我来说有更好的选择,还是我不应该尝试(就像上面的答案所建议的那样)?

编辑:该应用实际上是一个具有有限数量 token 的开发人员工具。因为用户都有技术技能,所以他们中的大多数(我假设)都有足够的知识来查找和更改 Plist 文件或 Keychain 数据。

最佳答案

这个解决方案对我来说非常有效。试试这个:https://github.com/nielsmouthaan/SecureNSUserDefaults 。它将在您的 UserDefaults 文件中存储加密的 bool/string/float/integer。希望这就是您想要的。确保下载并添加 CocoaSecurity到你的项目。 CocoaSecurity 是 SecureNSUSerDefaults 的必需元素,因此您无需将其导入到任何文件中。您还必须下载Base64 ,这是 CocoaSecurity 的必需元素。您还需要将 Base64 添加到项目中,但不需要将其导入到任何文件中。

使用

将头文件导入到您想要使用加密方法的任何位置。

#import <SecureNSUserDefaults/NSUserDefaults+SecureAdditions.h>

然后,设置加密 key ,可能在您的 awakeFromNib 方法中:

[[NSUserDefaults standardUserDefaults] setSecret:@"your_secret_goes_here"];

我建议生成一个随机的数字和字母字符串。 然后,您必须将信息存储在 UserDefaults 文件中。

[[NSUserDefaults standardUserDefaults]
    setSecretObject:@"your_secret_object"
    forKey:@"the_key_your_object_will be_stored_under"];

要检索字符串,请使用以下方法:

NSString *retrievedData = [[NSUserDefaults standardUserDefaults]     
    secretStringForKey:@"the_key_your_object_will be_stored_under"];

希望这会有所帮助!

关于cocoa - 保存用户的硬币数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356317/

相关文章:

java - 将 ColdFusion Java 哈希函数移植到 Ruby

c# - 一个新的随机初始化向量在加密过程中总是产生相同的密文

java - Hibernate 标准结果会在单个事务期间更新而无需 session 刷新吗?

objective-c - 如何同时保存 NSDocument?

cocoa - token 字段的可拖动元素,如 Mac 时钟格式面板

iphone - 应用程序退出时泄漏

hibernate - Grails将Java 8域对象的LocalDateTime映射到Gorm

cocoa - NSToolBar 上的复选框不会更新?

javascript - Parse.com 云代码 RSA 验证 - Android 应用内购买验证

java - 停止 java servlet 中的 doGet/dopost?