对于个人 MMO 游戏项目,我在 java 中实现了一个自制可靠的基于 UDP 的协议。鉴于我目前的设置,我相信窥探者劫持会话相对简单,所以为了防止这种情况发生,我借此机会学习了一点密码学。它非常有趣。
我可以使用Diffie-Hellman 密钥交换(一个非常聪明的概念)在客户端和服务器之间成功创建共享密钥,但现在我需要使用它来保证数据包的真实性。到目前为止,我的初步测试表明,我尝试过的几种不同的密码会使数据量有点膨胀,但我希望尽可能地小而快。
鉴于我只是尝试验证数据包而不是隐藏整个有效负载,我的想法是我可以将密钥生成的 8 字节会话 ID 放入数据包标头,加密整个数据包,然后将其散列回来减少到 8 个字节。我取未加密的数据包并将 8 字节散列放入会话 ID 的位置,然后将其发送出去。
这会安全吗?加密整个数据包只是为了不加密发送它感觉有点不雅 - 有没有更好/更快的方法来实现我的目标?请注意,我想自己做这件事,因为它的经验很好,所以我对 3rd 方库或其他协议选项不太感兴趣。