在 Java 网络通信中,“加密”通常指保护传输数据的机密性、完整性和身份认证。常见方案按使用层次可分为:传输层加密(TLS/SSL)、应用层加密(自定义加解密)、以及结合令牌/签名的安全设计。
下面按最常见、最实用的方式讲解。
✅ 不需要自己实现加密算法
✅ 安全性高、成熟、防窃听和中间人攻击
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(证书)
✅ 实际项目最常用
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();
适合:
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());
⚠️ 注意:
AES/CBC/PKCS5Padding 或 GCM)适合:
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
流程:
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secretKey);
byte[] signature = mac.doFinal(data);
| 场景 | 推荐方案 |
|---|---|
| Web 接口 | HTTPS(TLS) |
| _socket 通信 | SSLSocket |
| 内部服务 | mTLS(双向证书) |
| 数据字段加密 | AES |
| 密钥交换 | RSA / ECDH |
| 防篡改 | HMAC / 签名 |
如果你愿意,可以告诉我:
我可以直接给你可运行的完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。