JDK 內建完善的加密與安全支援,尤其對 Socket 通訊的原生支持,讓開發者能輕鬆在客戶端與伺服器間建立安全數據流。本文透過實例示範如何利用 Java Stream 與 JCE(Java Cryptography Extension)實現透明加解密。
採用對稱加密機制,客戶端與伺服器持有相同金鑰。利用 Cipher 類別初始化加密(ENCRYPT_MODE)與解密(DECRYPT_MODE)兩組實例,分別處理雙向通訊的輸出入數據。
javax.crypto 套件提供這兩種裝飾器流,分別包裝 InputStream 與 OutputStream,配合 Cipher 物件即可在讀寫時自動完成加解密,無需修改既有邏輯。
SocketHandler 執行緒處理。KeyGen 取得密鑰,建立 SecretSocket 物件,所有 I/O 操作均委派給它。Socket,getInputStream() 回傳鏈接 CipherInputStream,getOutputStream() 同理,實現透明加密通道。// 初始化雙向 Cipher
outCipher = Cipher.getInstance(algorithm);
outCipher.init(Cipher.ENCRYPT_MODE, key);
inCipher = Cipher.getInstance(algorithm);
inCipher.init(Cipher.DECRYPT_MODE, key);
// 取得加密後的輸入流
InputStream in = ss.getInputStream(); // 實際為 CipherInputStream
此架構將加密細節封裝於 Socket 層,業務邏輯完全感知不到加密存在,極大降低安全整合複雜度。