我和一位朋友正在开发一个客户端/服务器架构的Java游戏。它工作得很好,但我遇到了一个问题。我们使用TCP Sockets在服务器和客户端之间进行网络连接。我们的网络协议不是加密的,只能被一个费心观看流的人读取。
我们思考如何应用某种加密技术来隐藏登录信息,并防止人们编写自己的客户端。但是像加/减字节这样的基本事情似乎很容易弄清楚。
用于加密游戏(或至少是游戏登录信息)网络通信的常用方法是什么?已经用java编写了服务器和客户端,有没有什么有用的java库?
发布于 2010-08-18 17:46:29
使用公钥加密(例如RSA)并实现类似于SSL Handshake的东西,当然也可以使用SSL - here you can see an example。
下面是一个简化的序列:
<代码>F211
现在客户端和服务器都有一个密钥,任何人都不能窃听。然后使用该密钥对所有数据进行加密。
发布于 2010-08-18 17:45:34
安全套接字层(Secure Sockets Layer,安全套接字层)(Secure Sockets Layer,安全套接字层)就是为了解决这类问题而流行的。
发布于 2010-08-18 17:50:30
看看javax.crypto库或bouncyCastle。
两者都提供加密原语,也用于加密。根据您想要的安全性,您可以使用对称加密或非对称加密。但是,也要提前考虑密钥管理。您将私钥/共享密钥存储在何处。
如果是客户端-服务器,最好的方法是使用非对称加密(即RSA,Elliptic Curve),并给每个用户一个用服务器密钥签名的证书(注意,这是TLS (以前称为SSL))。通过这种方式,您可以检查登录的用户是否真实。但是,您不能阻止自定义客户端,因为用户必须让每个人都可以复制证书。
在实践中,很难阻止自定义客户端。
https://stackoverflow.com/questions/3510706
复制相似问题