温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java网络通信如何加密

发布时间:2026-10-03 15:25:58 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 网络通信中,“加密”通常指保护传输数据的机密性、完整性和身份认证。常见方案按使用层次可分为:传输层加密(TLS/SSL)、应用层加密(自定义加解密)、以及结合令牌/签名的安全设计。

下面按最常见、最实用的方式讲解。


一、最推荐:使用 TLS/SSL(HTTPS / SSLSocket)

✅ 不需要自己实现加密算法
✅ 安全性高、成熟、防窃听和中间人攻击

1️⃣ 基于 TCP 的 SSL(SSLSocket)

服务端

SSLServerSocketFactory factory =
        (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket serverSocket =
        (SSLServerSocket) factory.createServerSocket(8443);

Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(
        new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());

客户端

SSLSocketFactory factory =
        (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket =
        (SSLSocket) factory.createSocket("localhost", 8443);

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello SSL");

需要配置 keystore 和 truststore(证书)


2️⃣ 基于 HTTP 的加密(HTTPS)

✅ 实际项目最常用

使用 Spring Boot(最简单)

server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: 123456
    key-store-type: PKCS12

客户端直接:

URL url = new URL("https://localhost:8443/api");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

二、应用层加密(对称加密)

适合:

  • 已有 TCP / HTTP
  • 想对特定字段或消息体加密

1️⃣ AES 对称加密(推荐)

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey key = keyGen.generateKey();

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] encrypted = cipher.doFinal("secret".getBytes());

⚠️ 注意:

  • 不要使用 ECB(更安全用 AES/CBC/PKCS5Padding 或 GCM)
  • 密钥不能硬编码

三、非对称加密(RSA)

适合:

  • 密钥交换
  • 数字签名
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048);
KeyPair keyPair = generator.generateKeyPair();

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] encrypted = cipher.doFinal("data".getBytes());

四、混合加密(真实项目常用)

✅ RSA + AES

流程:

  1. 客户端生成 AES 密钥
  2. 用服务端 RSA 公钥加密 AES 密钥
  3. 用 AES 加密业务数据

五、消息完整性(防篡改)

HMAC

Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secretKey);
byte[] signature = mac.doFinal(data);

六、选型建议

场景 推荐方案
Web 接口 HTTPS(TLS)
_socket 通信 SSLSocket
内部服务 mTLS(双向证书)
数据字段加密 AES
密钥交换 RSA / ECDH
防篡改 HMAC / 签名

七、常见错误 ❌

  • 自己实现加密算法
  • 密钥写死在代码里
  • 使用 MD5 / DES
  • 明文传输 token
  • 忽略证书校验

如果你愿意,可以告诉我:

  • 用的是 Socket / HTTP / WebSocket / Netty
  • 是 客户端-服务端 还是 微服务
  • 是否需要 国密(SM2/SM4)

我可以直接给你可运行的完整示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手