【问题标题】:Encode number in frontend (for Game) to keep it secret在前端编码数字(用于游戏)以保密
【发布时间】:2017-07-21 15:37:25
【问题描述】:

是否可以对一个数字进行编码,以便在前端(使用 javascript)我可以知道它并用它计算而无需黑客找出这个数字?

我正在做一个使用服务器端逻辑和客户端逻辑的浏览器游戏。

例如:
敌人的生命值为 100。这可以在后端(服务器)中编码。
炮塔每秒伤害 = 1。后端知道,前端知道。
我想计算距离为 0 还剩多长时间(直到敌人被炮塔杀死)。
但我希望黑客不会通过查看我的源代码并重新编写它来发现敌人有 100 点生命值。
我无法设置类似:will_die_at = 10 分钟后。因为玩家会通过知道确切的死亡时间来发现这个敌人的生命值很低。敌人的生命值可以从 10 到 100k 不等。出于战略目的,这应该是未知的。

我相信前端的任何可以解析这个数字的解码函数也可以被黑客发现,他们无论如何都可以得到这个数字:)

另一个问题是我不能每分钟都询问服务器,否则敌人已经死了。因为场上有数百名敌人。我的服务器将完全超载。这应该只在前端完成:)

这是一个基于服务器的浏览器 HTML5 MMO。我相信有些人会努力破解我的代码并找出这些数字并制作有用的脚本/帮助程序/补丁来出售给其他玩家。这将导致不公平的 PvP。


到目前为止,我有两个选择:
1. 只需向玩家显示敌人的确切生命值。
2.后端知道这个敌人的确切死亡时间。例如 Date.now() 是 14:00:00,死亡时间 - 今天 15:12:37。前端不知道。但我不能每 1-5-10 秒询问一次服务器 - 是吗?是吗?所以我的服务器给前端一个号码:14:02:37。并且前端仅在此给定时间之后每 10 分钟请求一次服务器 - 是吗?并且服务器总共响应了 6 次 - 作为“否”,这个敌人还没有死,但你不知道你会重复这个问题多久,直到它死。它第 7 次响应 - “是的,它在一秒钟前就死了”,因为服务器知道它已经死了。所以,这会给服务器一些垃圾邮件,但不会太高,而且当垃圾邮件非常罕见时,它可能可以处理这些垃圾邮件。并且黑客无法查明敌人的健康状况。

【问题讨论】:

  • And the other problem is that i can not ask server every minute or Enemy has already died. Because there are hundreds of enemies on field. My server will be totally overloaded. This should be done only in frontend. 这是一个错误的想法。这应该都是在服务器端计算的,只有渲染应该在客户端完成。服务器需要成为主状态,客户端需要尊重提供的任何数据。
  • 是的,我明白这一点。但它会使我的服务器超载。我一直在寻找一个选项,这甚至是可能的。但到目前为止,这似乎是不可能的,我能做到的 - 只需在前端显示这种健康状况,玩家就会知道这个敌人死亡的确切时间。我的游戏中的策略较少,但从技术上讲,我没有其他选择:)
  • 至于策略设计,您可以尝试在 game development 堆栈交换中询问,看看他们是否对如何围绕它构建策略有任何想法。
  • 我正在考虑这个。但这是比设计更多的技术问题。因为我的项目已经太复杂了,无法解释我目前的设计:)

标签: javascript


【解决方案1】:

由于浏览器完全在用户的控制之下,这是不可能的。您可以混淆您的代码和值,但不能对其进行加密,以便其他人无法解密它们。因为如果您以不可解密的方式对其进行加密,您的程序也将无法解密它。

服务器交互是必要的,因为您需要一个“保护区”来隐藏您的秘密。

【讨论】:

  • 是的,同样的我槽 :D 我槽也许已经为此目的发明了一些东西 :D
  • 为什么不用服务器?
  • 因为我不能向我的服务器发送垃圾邮件,每秒/分钟询问一次,否则这个敌人就死了。战场上有数百名敌人。有 2-5 个可见的此类字段。一台服务器上有 10k 个字段
  • 我可能会以某种方式巧妙地为所有敌人使用 cron 作业,并使用套接字推送通知,比如每 10 秒如果它死了。我不在乎它有多复杂,但这听起来一样 - 太超载了。我目前的选择是放弃,只显示健康而不隐藏它。然后我可以很容易地计算出一切。但玩家可不是很高兴。我现在不知道其他选择:)
  • 你应该做的是运行相同的逻辑客户端和服务器端,这样客户端就没有太多明显的延迟。然后频繁,多频繁取决于游戏设计和硬件能力,将更新的游戏状态从服务器发送到客户端。快节奏游戏每秒发送多次更新数据包的情况并不少见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2016-08-09
  • 2019-04-25
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多