- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个游戏,我希望高分能够保存在本地,但我不希望用户能够进入 plist 文件并更改值。让用户难以轻松编辑高分的最佳方法是什么。将值设为 NSNumber 然后我将其写为 NSData 就足够了吗?
最佳答案
AES 可能比它在这里的值(value)更麻烦。尽管我很尊重 Jeff LaMarche,但这个实现并不好。它足以用于此目的,但在我看来,除非您了解什么是对的,什么是错的,否则它不是可以复制的东西。我在 Properly encrypting with AES with CommonCrypto 中详细讨论了这个问题并包括如何正确执行 AES;但您可能不希望在这里正确执行 AES 的麻烦,即使您这样做也不会给您带来太多好处。
我的建议是一个简单的校验和哈希:
- (NSUInteger)checksumForScore:(NSUInteger)score player:(GKPlayer *)player {
NSString *string = [NSString stringWithFormat:@"%d%@%@", score, [player playerID], kLongRandomPassword];
return [string hash];
}
然后您将校验和与分数一起存储。你像这样验证它:
- (BOOL)isValidChecksum:(NSUInteger)checksum forScore:(NSUInteger)score player:(GKPlayer *)player {
return (checksum == [checksumForScore:score player:player]);
}
我在这里使用了 GKPlayer playerID
来选择您易于使用的东西,但对于设备所有者来说在玩游戏时更改起来并不容易。这样做会使重放攻击变得困难。我不能只是将我 friend 的超高分的 plist 条目复制到我的 plist 中。当用户更改设备或恢复此设备时,它也非常持久。如果您不使用 GameKit,首先,您可能应该 :D,其次,您必须弄清楚是否还有其他要使用的键。如果您让用户在某个时候输入“用户句柄”,也可以。任何对用户来说足够独特以至于他不会只是复制他 friend 的东西。
钥匙串(keychain)作为一种混淆技术很有趣。即使是合法阅读也是一种皇家痛苦,所以官方 SDK 提供了自己的混淆 :D 我怀疑这是否值得,但它是“隐藏”少量数据的好地方。
NSCoding
甚至不是混淆。任何愿意打开 plist 的人都可以在不到一分钟的时间内读写 NSCoding
。将其转换为 NSData
也是如此。将其存储在 SQLite 或 Core Data 中也是如此。
@CocoaFu 关于 NSDataWritingFileProtectionComplete
的建议很聪明,但我怀疑它是否会对越狱设备产生任何实际影响。设备解锁后,操作系统将为您解密任何文件,因此对于知道设备 PIN 码的人来说完全没有障碍。
关于iphone - 将值保存到磁盘并防止篡改的最佳方法? (没有顶级加密),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216796/
大家好,我是沙漠尽头的狼。 本文首发于 Dotnet9 ,介绍使用 Lib.Harmony 库拦截第三方 .NET 库方法,达到不修改其源码并能实现修改方法逻辑、预期行为的效果,并
我有Helm Applciations使用 Terraform 的 helm_release 资源与 Terraform 一起部署。 有时由于以下一个或多个原因,我的 Kubernetes Pod 将
我有Helm Applciations使用 Terraform 的 helm_release 资源与 Terraform 一起部署。 有时由于以下一个或多个原因,我的 Kubernetes Pod 将
我们开发了一个 Javascript 文件供客户使用。 Javascript 片段对其运行的网站进行屏幕截图,然后通过 jQuery.post() 将其发送回我们的服务器 我们行业的性质意味着我们必须
我在本地主机上运行我的测试站点。 当我用 URL 加载它时: localhost/projects/forums/index.php 它看起来像这样(符合预期) 但是当 我给 URL: localho
我正在 中共同开发一个简单的网络应用程序 rails 3.0.9 我已经意识到可能通过恶意请求篡改 session_id。请注意,这是我的第一个 RoR 应用程序,所以我的概念可能完全错误。 当前的应
我返回了以下 JSON 数据,但由于某种原因,Javascript 或 jQuery ajax 似乎重新组织了项目列表。服务器返回按item.title字母顺序排序的数据(已验证)... 下面的 JS
背景 我是一名经验丰富的 Web 开发人员(主要使用 Python 和 CherryPy),之前从头开始实现过安全 session 管理,现在正在学习 Rails。我正在调查 session 暴露的
我正在使用 MVC3、.NET4.5、C#、Razor。 我在 Codeproject 之外重用了 Albin 的一些非常有用的代码,通过添加哈希来防止 URL 篡改。主要运行良好。 然而…… 我现在
我是一名优秀的程序员,十分优秀!