DES 加密解密工具
支援 DES 和 Triple DES(3DES),五種加密模式可選
加密配置
什麼是 DES?
DES(Data Encryption Standard,資料加密標準)誕生於 1977 年,由 IBM 研發並經美國國家安全局修改後成為聯邦標準。它採用 Feistel 網路結構,將 64 位元明文分成左右兩半,經過 16 輪迭代運算產生密文。DES 的金鑰名義上是 64 位元,但其中 8 位元用於同位元檢查,實際有效金鑰長度只有 56 位元。 56 位元金鑰在當年算得上安全,但隨著運算能力的飛速提升,1999 年就已經能在 22 小時內被暴力破解。為了延續 DES 的生命力,Triple DES(3DES)應運而生——它用三組不同的金鑰對資料執行三次 DES 加密,有效金鑰長度達到 168 位元,安全性大幅提升。3DES 被廣泛用於金融支付領域,至今仍是 EMV 晶片卡和部分銀行系統的底層加密方案。 雖然 AES 已經取代 DES 成為新的加密標準,但在很多舊系統、金融協定和嵌入式裝置中,DES 和 3DES 仍然在發揮作用。本工具支援 DES 和 3DES 兩種演算法,配合 CBC、ECB、CFB、OFB、CTR 五種模式,方便你在相容舊系統或學習密碼學時使用。
使用方式
使用方式
- 選擇演算法:DES(56 位元金鑰)或 3DES(168 位元金鑰)
- 選擇加密模式,建議使用 CBC
- 選擇填充方案,PKCS#7 適用於大多數情況
- 輸入金鑰或點選「產生隨機金鑰」
- 對於需要 IV 的模式,請輸入或產生一組
- 在左側輸入要加密的明文或要解密的密文
- 結果會自動顯示在右側
加密模式
- CBC — 密碼區塊鏈結。加密前將每個明文區塊與前一個密文區塊進行 XOR 運算。需要 IV。安全性佳,是最常用的模式。
- ECB — 電子密碼簿。每個區塊獨立加密——相同的明文區塊會產生相同的密文。適用於單一 8 位元組區塊,不建議用於較長的資料。
- CFB — 密碼回饋。將區塊加密轉換為串流加密。適合逐位元組或以小區塊處理資料。
- OFB — 輸出回饋。類似 CFB,但錯誤不會傳播。適用於通訊頻道雜訊較多的情況。
- CTR — 計數器模式。使用遞增計數器產生金鑰串流。支援平行加密與解密,效能優異。
提示
- 盡可能使用 AES,DES 主要為了向後相容而存在
- 3DES 比 DES 安全得多,但速度大約慢三倍
- 每次加密務必使用不同的隨機 IV
- 避免使用 ECB 加密超過 8 位元組的資料
- 產生隨機金鑰,而非輸入容易記住的字串
使用場景
技術原理
DES 是一種 Feistel 區塊加密演算法,於 1977 年以 FIPS 46 標準發布。它以 64 位元區塊和 64 位元金鑰運作,其中 8 位元為同位元檢查位,有效金鑰素材為 56 位元。加密過程始於初始置換(IP),將 64 位元狀態分成兩個 32 位元半部 L0 和 R0,然後執行 16 輪 Feistel 迭代,形式為 (L_{i+1}, R_{i+1}) = (R_i, L_i XOR F(R_i, K_i))。輪函數 F 透過 E-box 將 32 位元擴展為 48 位元,與由 PC-1/PC-2 金鑰排程器產生的 48 位元輪金鑰 K_i 進行 XOR 運算,再套用八組 6 轉 4 位元的 S-box(S1..S8),最後執行 P-box 置換。最終置換(FP = IP^-1)產生密文。 Triple DES 定義於 NIST SP 800-67,以加密-解密-加密(EDE)結構套用三次 DES:C = E_{K3}(D_{K2}(E_{K1}(P)))。金鑰選項 1 使用三組獨立的 56 位元金鑰(168 位元原始素材,對中間相遇攻擊約有 112 位元的有效安全性);金鑰選項 2 設定 K1 = K3(約 80 位元有效安全性)。區塊加密模式將 DES/3DES 包裝起來以處理超過 64 位元的訊息:ECB 獨立加密每個區塊,會洩漏明文模式;CBC 透過 C_i = E_K(P_i XOR C_{i-1}) 以隨機 8 位元 IV 進行鏈結;CFB 和 OFB 將區塊加密轉為自同步或同步串流加密;CTR 將明文與 E_K(nonce || counter) 進行 XOR 運算。 DES 的 56 位元金鑰空間(2^56 約 7.2 x 10^16)可被窮舉:EFF DES Cracker 於 1998 年以 22 小時破解 DES 挑戰,使用的是客製化 ASIC;現代 GPU/FPGA 叢集可在數小時內完成。NIST SP 800-131A 於 2005 年淘汰單一 DES,並在 2023 年後禁止 Triple DES 用於加密;Sweet32 生日攻擊(CVE-2016-2183)進一步削弱了 TLS 中的 3DES,因為其 64 位元區塊大小使得在單一金鑰下約 2^32 個區塊(約 32 GB)後就會發生碰撞。現代系統應改用 AES-128 或 AES-256 搭配認證模式,如 GCM 或 ChaCha20-Poly1305。
- DES 金鑰為 8 位元組含同位元(56 位元有效);3DES 金鑰為 16 位元組(2-key,約 80 位元安全性)或 24 位元組(3-key,對中間相遇攻擊約 112 位元安全性)。
- 區塊大小為 64 位元 / 8 位元組;CBC、CFB、OFB 和 CTR 均需要 8 位元組 IV/nonce,ECB 不使用 IV(且在區塊層級洩漏模式)。
- PKCS#7 填充附加 N 個值為 N 的位元組(1 ≤ N ≤ 8);當明文長度已為 8 的倍數時,會新增一個完整的 8 位元組 0x08 區塊。
- 弱金鑰 0x0101010101010101、0xFEFEFEFEFEFEFEFE 以及四組半弱金鑰對會使金鑰排程中的 K1 = K2,因此 E_K = D_K——產生隨機金鑰時應避免使用。
- Sweet32(CVE-2016-2183)利用 3DES 的 64 位元區塊:單一金鑰在約 2^32 個區塊後發生碰撞(CBC 模式下約 32 GB 明文)。
- NIST SP 800-67 Rev. 2 於 2023 年 12 月 31 日後禁止 Triple DES 用於加密;新設計應使用 AES-GCM 或 ChaCha20-Poly1305,而非 DES 或 3DES。
- EFF DES Cracker(Deep Crack)於 1998 年 7 月以不到 25 萬美元在 22 小時內破解 DES;現代 GPU 叢集可在數小時內完成,因此單一 DES 不是有效的機密性控制手段。
範例
DES-CBC 加密
明文: Hello World
金鑰 (hex): 0123456789abcdef
IV (hex): fedcba9876543210
模式: CBC / PKCS#7
輸出: Base64 編碼的密文3DES 加密
演算法:Triple DES
金鑰 (hex):24 位元組(48 個 hex 字元)
模式:CBC / PKCS#7
備註:168 位元金鑰長度目前仍被視為安全,但新專案建議改用 AESECB 單一區塊
明文:8 位元組(剛好一個 DES 區塊)
金鑰: 0123456789abcdef
模式: ECB / PKCS#7
備註: ECB 僅在處理單一 8 位元組區塊時才安全;切勿用於較長的資料常見問題
DES 現在還能安全使用嗎?
不行。純 DES 的有效金鑰只有 56 位元,1998 年就被公開破解 — 專用硬體一天內可以暴力破解,現代雲端 GPU 只需幾分鐘。NIST 已於 2005 年正式撤銷 DES。新系統請改用 AES。
那 Triple DES(3DES)呢?
3DES 用兩組或三組金鑰把 DES 套用三次,提供約 112 位元的有效安全強度。NIST 於 2017 年將 3DES 列為棄用,並在 2023 年後禁止用於新應用,原因是其 64 位元區塊大小遭遇生日界線攻擊(Sweet32)。它僅在舊系統(早期銀行與 POS 網路)中還在用 — 能升級就升級。
為什麼這個頁面還保留 DES?
因為現實世界中仍有舊系統在用。當你必須與舊銀行格式、嵌入式韌體互通,或是在做考試題目時,這個工具就派上用場。它不是建議 — 新程式碼請使用 AES。
DES 有哪些模式?分別代表什麼?
ECB 對每個區塊獨立加密,會洩露樣式。CBC 將區塊串接,需要 IV。CFB 與 OFB 把 DES 當作串流加密。CTR 使用計數器作為 nonce。對 DES 而言,若以互通為目標,建議使用 CBC + PKCS#7 填充;切勿在真實資料上使用 ECB。
DES 的區塊大小和金鑰大小是多少?
DES 區塊大小 64 位元,金鑰 64 位元,其中只有 56 位元是金鑰材料(8 位元為奇偶校驗)。三金鑰版本的 3DES 區塊仍是 64 位元 — 這也是高資料量下會踩到 Sweet32 的原因。
計算是在我的瀏覽器中完成嗎?
是的。DES 透過 JavaScript 在本機計算。金鑰與明文不會離開裝置。你可以在加解密過程中打開 Network 分頁驗證。
為什麼我的 3DES 輸出和對接系統對不上?
常見原因:金鑰奇偶位元錯誤、金鑰位元組順序不同、模式錯誤(ECB 與 CBC)、缺少或多餘的 IV、填充方式不對(PKCS#7 與 ZeroPadding),或是雙方一邊用 UTF-8、另一邊用 UTF-16 編碼輸入。除錯真實資料前,先和對方確認一組已知測試向量。