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 — 密码块链接模式。加密前,先将每个明文块与前一个密文块进行异或运算。需要初始化向量(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 盒将 32 位扩展为 48 位,与由 PC-1/PC-2 密钥调度派生的 48 位轮密钥 K_i 进行异或,再经过 8 个 6 转 4 位的 S 盒(S1..S8),最后执行 P 盒置换。最终置换(FP = IP^-1)生成密文。 三重 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) 进行异或。 DES 的 56 位密钥空间(2^56 ≈ 7.2 × 10^16)可被穷举:EFF DES Cracker 于 1998 年使用定制 ASIC 在 22 小时内破解了 DES 挑战,现代 GPU/FPGA 集群只需数小时即可完成。NIST SP 800-131A 于 2005 年淘汰了单 DES,并在 2023 年后禁止将三重 DES 用于加密;Sweet32 生日攻击(CVE-2016-2183)进一步削弱了 TLS 中的 3DES,因为其 64 位分组长度在单密钥下约 2^32 个分组(约 32 GB)后就会产生碰撞。现代系统应使用 AES-128 或 AES-256 搭配 GCM 或 ChaCha20-Poly1305 等认证加密模式。
- DES 密钥为 8 字节含校验位(56 位有效);3DES 密钥为 16 字节(双密钥,约 80 位安全性)或 24 字节(三密钥,抵御中间相遇攻击约 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 日后禁止将三重 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。
三重 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 vs CBC)、缺失或多余的 IV、填充方式不一致(PKCS#7 vs ZeroPadding),以及一边按 UTF-8 编码而另一边按 UTF-16 编码。建议先用一个已知测试向量与对端核对,再去排查真实数据。