首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中的网络通信加密

java中的网络通信加密
EN

Stack Overflow用户
提问于 2010-08-18 17:36:16
回答 4查看 13.1K关注 0票数 9

我和一位朋友正在开发一个客户端/服务器架构的Java游戏。它工作得很好,但我遇到了一个问题。我们使用TCP Sockets在服务器和客户端之间进行网络连接。我们的网络协议不是加密的,只能被一个费心观看流的人读取。

我们思考如何应用某种加密技术来隐藏登录信息,并防止人们编写自己的客户端。但是像加/减字节这样的基本事情似乎很容易弄清楚。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-18 17:46:29

使用公钥加密(例如RSA)并实现类似于SSL Handshake的东西,当然也可以使用SSL - here you can see an example

下面是一个简化的序列:

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

<代码>F211

现在客户端和服务器都有一个密钥,任何人都不能窃听。然后使用该密钥对所有数据进行加密。

票数 14
EN

Stack Overflow用户

发布于 2010-08-18 17:45:34

安全套接字层(Secure Sockets Layer,安全套接字层)(Secure Sockets Layer,安全套接字层)就是为了解决这类问题而流行的。

票数 4
EN

Stack Overflow用户

发布于 2010-08-18 17:50:30

看看javax.crypto库或bouncyCastle。

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

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

在实践中,很难阻止自定义客户端。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3510706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档