作為對稱加密領域的經典算法,DES(Data Encryption Standard)雖然因 56 位密鑰長度在現代標準下已不夠安全,但其設計思想和實現模式仍是理解現代加密體系的基石。本文不僅解析 DES 核心原理,更提供了一個可無縫切換 DES、3DES、AES、Blowfish、RC2、RC4 等多種算法的統一編碼框架。
DES 採用 64 位分組加密(實際有效密鑰 56 位),包含三個核心參數:Key(8 字節工作密鑰)、Data(8 字節待處理數據)、Mode(加密/解密模式)。其核心過程為:初始置換 → 16 輪 Feistel 網絡迭代 → 逆置換。雖然單 DES 已被淘汰,但理解其結構對掌握 3DES、AES 至關重要。
DESCoder 類展示了優秀的策略模式應用——只需修改 ALGORITHM 常量和密鑰生成邏輯,即可切換多種算法:
public abstract class DESCoder extends Coder {
public static final String ALGORITHM = "DES"; // 可替換為 DESede, AES, Blowfish 等
private static Key toKey(byte[] key) throws Exception {
// DES 專用密鑰轉換
DESKeySpec dks = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(dks);
// 其他算法(AES、Blowfish 等)使用:
// SecretKey secretKey = new SecretKeySpec(key, ALGORITHM);
return secretKey;
}
public static String initKey(String seed) throws Exception {
SecureRandom secureRandom = seed != null ?
new SecureRandom(decryptBASE64(seed)) : new SecureRandom();
KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM);
kg.init(secureRandom);
SecretKey secretKey = kg.generateKey();
return encryptBASE64(secretKey.getEncoded());
}
// encrypt/decrypt 方法省略...
}
| 算法 | 密鑰長度要求 | 密鑰轉換方式 |
|---|---|---|
| DES | 56 位 | DESKeySpec + SecretKeyFactory |
| 3DES | 112 或 168 位 | SecretKeySpec |
| AES | 128/192/256 位 | SecretKeySpec |
| Blowfish | 32-448 位(8 的倍數) | SecretKeySpec |
| RC2/RC4 | 40-1024 位 | SecretKeySpec |
測試類展示了標準加密解密流程,控制台輸出確認數據完整性:
原文: DES
密鑰: f3wEtRrV6q0=
加密後: C6qe9oNIzRY=
解密後: DES
實戰建議: