java中的网络通信加密

时间:2010-08-18 09:36:16

标签: java security encryption networking

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

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

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

4 个答案:

答案 0 :(得分:9)

使用公钥加密(例如RSA)并实施SSL Handshake之类的内容,当然也可以使用SSL - here you can see an example

这是一个简化的序列:

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

查看javax.crypto库或bouncyCastle。

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

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

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

答案 3 :(得分:0)

您可以使用Ciphers。更多示例herehere