我有一个我创建的RPG的角色创建程序,我希望能够在用户有机会编辑任何内容之前记录初始滚动的内容。我可以轻松地将信息转储到文本文件或类似的东西,但我想要一些无法编辑的东西。我将字符信息保存在序列化的类对象中。以序列化形式(即在类对象内)记录此信息的最佳方法是什么?我想到了一个字符串,但这可能会变得相当大。还有更好的方法吗?
答案 0 :(得分:2)
我只想创建一个对象来保存初始滚动值;不能超过几十个字节 - 用户要滚动多少次?你没有真正解释卷代表什么,以及它们是否有固定数量。
如果此信息仅在应用程序运行期间持续存在,那么除此之外别无他法。
如果此信息必须在程序执行之后持续存在,那么您将不得不以某种方式将其写入文件。如果是这样,那么就没有办法真正保护它。 RPG游戏作家几十年来一直试图这样做,但收效甚微。通常,解决方案是将玩家统计数据保留在用户无权访问的中央服务器上。 C.F. 暗黑破坏神遭受的“重复”问题。
您最好的选择是将“roll”对象编写为可序列化。将其序列化为字符串,将字符串转换为字节,使用隐藏在代码深处的加密密钥加密字节,并将其写入文件。或者如果您愿意,只需安全地签署字符串即可。这将允许用户查看统计信息文件,但不能修改它。
旧的 Hack 游戏用于将游戏状态保存到具有类似保护的文件中,并且效果非常好。他们在Unix系统上使用的一个技巧是使文件的inode编号成为签名状态的一部分。这样,如果用户试图复制文件(以备份正在进行的游戏),则inode编号将改变,使文件无效。哈克对这些事情非常无情;如果它检测到修改后的保存文件,你的角色会当场死亡,游戏结束。
这里的问题是专用用户将对您的代码进行反向工程并发现加密算法和密钥,无论您多么努力地隐藏它们,或者(如果您只是签署文件)只需修改您的可执行文件,它不会检查签名。
如果没有关于你要做什么的更多细节,这是我给你的建议。如果(按照惯例)你告诉我们你到目前为止尝试了什么会有所帮助。