DES(Data Encryption Standard,資料加密標準) 於 1977 年被美國 NIST(當時的 NBS)採納為官方聯邦標準,是密碼學史上第一個公開且被大規模商業應用的對稱式區塊加密演算法。
雖然 DES 在現代已因金鑰過短(僅 56 位元)而被完全淘汰,但它所建立的 Feistel 網路結構 以及密碼學大師香農(Claude Shannon)提出的 混淆(Confusion)與擴散(Diffusion) 原則,直接奠定了 AES 等現代對稱密碼學的設計基礎。
| 參數項目 | 規格值 | 說明 |
|---|---|---|
| 區塊大小 (Block Size) | 64 bits (8 Bytes) | 資料一次被切割為 64 位元進行加密 |
| 金鑰名義長度 | 64 bits | 使用者輸入的原始金鑰長度 |
| 金鑰有效長度 | 56 bits | 每 8 個 Bit 中的第 8 位元被固定用於奇偶校驗(Parity Check) |
| 迭代輪數 (Rounds) | 16 輪 | 經過 16 輪重複的 Feistel 網路結構運算 |
| **子金鑰數量與長度** | **16 組 48-bit 子金鑰** | 由 56-bit 有效金鑰經 Key Schedule 生成K1 ...K16 |
DES 採用經典的 Feistel 網路(Feistel Cipher) 架構。Feistel 網路最大的優勢在於:加密與解密採用完全相同的演算法結構,解密時只需將 16 組子金鑰的使用順序完全反轉K16 -> K1 即可。
密碼學核心:S-Box 是 DES 演算法中「唯一」的非線性元件!沒有 S-Box,整個 DES 就只是一堆線性方程,可以在幾微秒內被一次聯立方程式解開。S-Box 提供了強大的**混淆(Confusion)**能力。
DES 被淘汰的最核心原因只有一個:有效金鑰長度過短(56 bits)。
在 Java 中,雖然 Cipher.getInstance("DES/CBC/PKCS5Padding") 依然存在於標準庫中(為了向下相容古老舊系統),但所有現代新系統開發中,嚴禁使用 DES 與 3DES。
KeyGenerator keyGen = KeyGenerator.getInstance("DES"); // 金鑰僅 56 bits,極度危險
// 主演算法/操作模式/填充機制
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");