java中的网络通信加密

java中的网络通信加密,java,security,encryption,networking,Java,Security,Encryption,Networking,我和一位朋友正在开发一款采用客户机/服务器体系结构的Java游戏。 它工作得很好,但我遇到了一个问题。 我们使用TCP套接字在服务器和客户端之间联网。 我们的网络协议不是加密的,只有一个懒得看流的人才能读取 我们考虑如何对其应用某种加密技术来隐藏登录信息,并阻止人们编写自己的客户端。但是添加/删除字节之类的基本操作似乎很容易理解 游戏的网络通信(或至少游戏登录信息)通常采用哪些加密方法?在用java编写了服务器和客户端之后,是否有有用的java库?SSL(安全套接字层)是处理此类问题的常用方法。

我和一位朋友正在开发一款采用客户机/服务器体系结构的Java游戏。 它工作得很好,但我遇到了一个问题。 我们使用TCP套接字在服务器和客户端之间联网。 我们的网络协议不是加密的,只有一个懒得看流的人才能读取

我们考虑如何对其应用某种加密技术来隐藏登录信息,并阻止人们编写自己的客户端。但是添加/删除字节之类的基本操作似乎很容易理解

游戏的网络通信(或至少游戏登录信息)通常采用哪些加密方法?在用java编写了服务器和客户端之后,是否有有用的java库?

SSL(安全套接字层)是处理此类问题的常用方法。

您可以使用。还有一些示例和

使用公钥加密(例如RSA)并实现类似的功能,或者当然使用SSL-

下面是一个简化的序列:

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

现在,客户端和服务器都有一个密钥,窃听者无法知道。然后使用该密钥加密所有数据。

查看javax.crypto库或bouncyCastle

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

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


在实践中,很难阻止定制客户端

工作正常,但是任何拥有有效客户端和有效登录名的人仍然可以对协议进行反向工程,从而创建自定义客户端…JSSE似乎就是我要寻找的,我只需要更改SocketType并创建密钥。对于逆向工程部分,这在这个项目中不是一个问题,因为它不会有什么大的问题,我不认为任何人会浪费时间重新考虑这个问题,并被认为是一种学习经验。如果发生这种情况,我想我必须推出一个更新,以摆脱自定义客户端,直到有人赶上。谢谢你的回答。