0

我有一个用于我创建的 RPG 的角色创建程序,我想要一种在用户有机会编辑任何内容之前记录初始滚动的方法。我可以轻松地将信息转储到文本文件或类似文件中,但我想要一些无法编辑的东西。我将字符信息保存在序列化的类对象中。以序列化形式(即在类对象内部)记录此信息的最佳方式是什么?我想到了一个字符串,但它可能会变得相当大。有没有更好的办法?

4

1 回答 1

2

我只想创建一个对象来保存初始滚动值;不能超过几十个字节——用户要滚动多少次?您并没有真正解释卷代表什么以及它们是否有固定数量。

如果这些信息只需要在应用程序运行期间持续存在,那么除此之外没有什么可做的了。

如果此信息必须在程序执行之后持续存在,那么您必须以一种或另一种方式将其写入文件。如果是这样,那么就没有办法真正保护它。几十年来,RPG 游戏作者一直在尝试这样做,但收效甚微。通常,解决方案是将玩家统计信息保存在用户无法访问的中央服务器上。参见暗黑破坏神遭受的“欺骗”问题。

您最好的选择是将您的“rolls”对象编写为可序列化的。将其序列化为字符串,将字符串转换为字节,使用隐藏在代码深处的加密密钥加密字节,然后将其写入文件。或者,如果您愿意,只需安全地签署字符串即可。这将允许用户查看统计文件,但不能修改它。

旧的Hack游戏用于将游戏状态保存到具有类似保护的文件中,并且运行良好。他们在 Unix 系统上使用的一个技巧是使文件的 inode 号成为签名状态的一部分。这样,如果用户试图复制文件(以备份正在进行的游戏),inode 编号将会改变,从而使文件无效。哈克对这些事情非常无情。如果它检测到一个修改过的保存文件,你的角色当场死亡,游戏结束。

这里的问题是,专用用户将对您的代码进行逆向工程并发现加密算法和密钥,无论您如何努力隐藏它们,或者(如果您只是对文件进行签名)只需修改您的可执行文件,使其不会不用费心检查签名。

如果没有更多关于你想要做什么的细节,这是我能给你的尽可能多的建议。如果(按照惯例)您告诉我们您到目前为止所做的尝试会有所帮助。

于 2013-05-25T15:44:04.123 回答