首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JAVA隐藏加密密钥AES-256

用JAVA隐藏加密密钥AES-256
EN

Stack Overflow用户
提问于 2013-08-21 18:27:42
回答 3查看 1.8K关注 0票数 0

现在,作为一个.jar文件,我们可以打开它,并使用任何反编译器查看代码和类。现在假设以下情况:

我在JAVA下开发了一个Client-Server应用程序,在Client和Server中,我都使用AES-256加密通过internet发送的数据。所以,我把“客户”交给我的朋友。现在.。问题是..。他能破解我的服务器,知道这些数据包是如何在客户端接收、处理和发回的吗?我是说..。加密数据时,当你有一个显示的代码,它是..。徒劳无功,不是吗?

问题是..。我怎样才能在服务器中拥有尽可能好的安全性?在这种情况下加密有效吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-21 18:32:24

不要使用加密只是为了隐藏客户端-服务器协议的工作方式。如果您希望您的服务器是安全的,即使客户端完全控制所发生的事情,也要使其安全。

正如您已经提到的,控制客户机很容易:不仅是通过反编译,还可以通过在调试器中运行客户机(它可以修改任何对象的内容,修改控制流等等)。

那么,我的观点是:

  1. 重要的是确定潜在的攻击向量在您的服务器中,并解决这些问题。例如,如果您希望能够向客户端发送cookie,而您希望客户端不更改地将其发送回来,则不需要加密;只需使用HMAC即可。
  2. 如果您真的想加密客户端和服务器之间的通信,不要直接使用AES (特别是因为听起来您使用的是固定密钥,这是不安全的)。您希望使用为有线加密设计的协议,如TLS (SSL)。是的,确实使用TLS (包括从证书颁发机构获得证书);不要走捷径。 TLS的好处是没有共享的秘密(如密钥)必须嵌入到jar中。所以你没什么好担心的。
票数 4
EN

Stack Overflow用户

发布于 2013-08-21 18:37:43

如果他攻击你的服务器--你指的是他--意思是弄清楚进入的数据包的协议和内容,然后发送奇怪的数据包,让你的服务器在意想不到的时候做意想不到的事情,那么解决方案似乎不是加密,而是强大的验证。也就是说,在协议的每一步,您的服务器应该只期望在传入的数据包中有一组有限的值,如果一些传入的数据包不符合这个/尝试做一些意想不到的事情,那么它们应该被丢弃。

票数 1
EN

Stack Overflow用户

发布于 2013-08-21 18:39:22

您的加密不会允许您隐藏客户端和服务器用来相互通信的协议/API/等。通过对客户端和服务器之间的数据流进行加密,可以防止有人在通过网络(想必是互联网)时观察到这种通信量。

要记住的一个问题是,AES需要一个客户端和服务器都知道的密码。如果您的密码是硬编码在jar中,那么拥有jar的任何人都可以窥探到服务器与连接到jar的任何客户端之间的任何通信量。因此,客户端和服务器需要一种安全的方式来商定用于给定连接的密码。

我建议使用基于SSL的技术来加密线路上的数据(例如,您可以简单地使用HTTPS作为您的协议)。或者使用公钥加密。

考虑到客户端和服务器之间的通信模式缺乏信息,很难提出具体的建议。

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

https://stackoverflow.com/questions/18365012

复制
相关文章

相似问题

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