javascript - 在线游戏 : A fast not-so-secure cryptographic hashing/a checksum function in JavaScript?

标签 javascript networking cryptography hash

我不需要它太安全。连md5这种一般坏掉的也比我需要的安全(只要2分钟内不能发现碰撞,应该100%没问题)。

我需要它来制作我们本周末将在黑客马拉松中制作的视频游戏。我们有一个模拟游戏核心部分的服务器,我们需要同步多个玩家(我们使用 socket.io 和 nodejs 作为 cometd 服务器)并确保没有玩家通过修改值作弊。因此校验和(如果他们发送了一个有效的校验和,它将与服务器中生成的校验和进行比较,则用户拥有正确的东西)。

因此,只要校验和不太容易被反向工程,就应该没问题。

此外,由于我对在线游戏没有太多经验(尽管我在 C、Java、Python 甚至 PHP 中使用套接字已有一段时间),如果有人可以推荐一些关于一般模式的读物,那就太棒了跟着。我只找到了一篇论文,解释了为什么《帝国时代 2》的在线版有点烂 :)

非常感谢

更多阐述:

每个客户端都有变量(具有属性等的对象)。事件发生在客户端,因此状态发生变化。根据状态,变量会发生变化。因此,客户端将状态和变量的哈希值发送到服务器。服务器从客户端获取新状态(例如,“右箭头已按下”),检查它们是否有效,然后在变量上生成新值。检查哈希值是否与客户端发送的哈希值相对应。如果没有,它会向客户端发送一条同步消息,为其变量提供新值。然后将其全部保存并向共享变量上的其他客户端发送更新。 (因为并非所有变量都可以被其他客户端看到)

哈希主要是为了同步。我不知道这是否是最好的方法,但这就是我想到的。但是,如果它们只是一个简单的校验和(例如 CRC32)而不是更难伪造的东西,我不想弄乱这些值。这样我觉得同步会更容易。

同样,我没有在视频游戏中建立网络的经验,但从我做过的其他事情来看,这听起来合乎逻辑。感谢所有反馈。

最佳答案

不要相信客户。将服务器用作中央机构,不是针对核心部分,而是针对所有部分。尽可能多地复制服务器端的游戏状态,并为客户端提供数据。不要做任何处理/尽可能少的客户端。无论客户端修改什么值,服务器都会拒绝它们。

关于javascript - 在线游戏 : A fast not-so-secure cryptographic hashing/a checksum function in JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485209/

相关文章:

java - 多播数据包未正确到达 podman 内部。已找到解决方法,但不清楚是防火墙问题还是 podman 问题?

linux - 如何将主机连接到她的虚拟网桥?

c# - 从数据包中删除 PPPOE 层

Java解密时出错

javascript - 验证 Mandrill 的 X-Mandrill 签名

javascript - 使用 RSA OAEP 加密和解密

javascript - JSON:无法读取未定义的属性 '0'

javascript - 使用物化框架时的空白页面

javascript - 有条件地激活 Material UI 工具提示?

javascript - 如何选择这个css