java中的网络通信加密

我和朋友正在开发一个带有客户端/服务器的Java游戏 – 架构。 它运作良好,但我遇到了一个问题。 我们使用TCP套接字在服务器和客户端之间建立联网。 我们的网络协议没有加密,只能由不愿看流的人阅读。

我们考虑过如何在其中应用某种加密技术来隐藏登录信息并阻止人们编写自己的客户端。 但是添加/减少字节等基本内容似乎很容易理解。

用于加密游戏网络通信(或至少游戏登录信息)的常用方法是什么? 在java中编写服务器和客户端,是否有任何有用的Java库?

使用公钥加密(例如RSA)并实现类似SSL握手的东西,或者当然使用SSL – 在这里你可以看到一个例子 。

这是一个简化的序列:

  • 服务器将其公共RSA密钥发送给客户端
  • 客户端生成对称密钥(例如,使用AES)
  • 客户端使用服务器的公钥加密对称密钥并将其发送到服务器
  • 服务器解密接收的对称密钥

现在客户端和服务器都有一个没有人窃听的密钥。 然后使用该密钥加密所有数据。

SSL (安全套接字层)很受欢迎,可以解决这类问题。

查看javax.crypto库或bouncyCastle。

两者都提供加密原语,也用于加密。 根据您想要的安全性,您可以使用对称或不对称加密。 但是,也要提前考虑密钥管理。 您在哪里存储您的私人/共享密钥。

如果它是客户端 – 服务器,最好的方法是使用不对称加密(即RSA,椭圆曲线)并为每个用户提供使用服务器密钥签名的证书(注意,这是TLS(以前称为SSL))。 这样,您可以检查登录的用户是否可信。 但是,您不会阻止自定义客户端,因为用户必须让每个人都可以复制证书。

实际上,要防止自定义客户端非常困难。

您可以使用密码 。 这里和这里有更多的例子