3DES 加密 / 解密

加密 / 解密 明文 → 密文
密钥、向量与明文只在浏览器本地参与运算,不会发送到服务器。 3DES(Triple DES)用 24 字节密钥做「加密 — 解密 — 加密」三次运算, 强度约 112 位,NIST 已于 2023 年正式弃用,新系统请改用 AES 或 SM4。
结果
填好密钥与向量后点「加密」,结果会显示在这里
在线 3DES(Triple DES / DESede)加解密工具,24 字节密钥,支持 ECB、CBC、CFB、OFB、CTR 模式与 PKCS#7 等填充,浏览器本地完成。

工具简介

3DES(Triple DES,又称 DES-EDE3)是对 DES 的加强:用 24 字节密钥拆成 K1 / K2 / K3 三把 8 字节子密钥,对数据依次做「用 K1 加密 → 用 K2 解密 → 用 K3 加密」(EDE,Encrypt-Decrypt-Encrypt)。当 K1 = K2 = K3 时它退化回普通 DES,因此可以兼容旧的 DES 数据。

它的有效强度约为 112 位(中间相遇攻击的结果,而不是简单的 3 × 56 = 168 位)。NIST 已在 2023 年正式弃用 3DES,新系统请改用 AES 或 SM4。

使用步骤

  1. 「密钥」填写 24 字节(3 × 8 字节),可以按文本输入,也可以切成 Hex 粘贴 48 位十六进制字符。
  2. 选择加密模式与填充方式。除 ECB 之外的所有模式都需要 8 字节向量(IV),注意 3DES 的分组仍是 64 位,IV 也是 8 字节而不是 16 字节。
  3. 输入明文点「加密」;切到「解密」粘贴密文再点「解密」即可还原。
  4. 密文支持 Hex* 与 *Base64 两种编码。

参数说明

参数可选值说明
密钥长度24 字节(固定)K1 + K2 + K3,各 8 字节
分组长度8 字节(固定)与 DES 相同,64 位
模式ECB / CBC / CFB / OFB / CTR与 AES 的模式语义相同
填充PKCS#7 / ZeroPadding / ANSI X9.23 / NoPadding流式模式不使用填充
向量 IV8 字节ECB 不使用,其余模式必填

关于 2-key 3DES

有些系统使用 16 字节密钥,把 K1 复用为 K3(即 K1 / K2 / K1)。这种变体有效强度约 80 位,本工具为了保持「密钥长度即算法参数」的清晰对应,只接受标准 24 字节形式。如果你手上的密钥只有 16 字节,请自行把它拼成 K1 + K2 + K1 的 24 字节形式再输入。

常见坑

  • IV 长度写错:3DES 分组是 64 位,IV 必须是 8 字节,误填 16 字节会直接报错。
  • 填充方式不一致:Java 默认 PKCS5Padding(在 8 字节分组下与 PKCS#7 等价),PHP 与 OpenSSL 默认 PKCS#7,两者可以互通;但如果对方用的是 ZeroPadding,就必须显式选择。
  • 密钥校验位:DES 系密钥每个字节的最低位是奇偶校验位,大多数实现(包括本工具)不会校验,直接按 56 位有效位使用。

与 OpenSSL 命令行的对应关系

  • 加密:openssl enc -des-ede3-cbc -K 0123456789abcdeffedcba98765432100123456789abcdef -iv 0102030405060708 -in plain.txt -out cipher.bin
  • 解密:openssl enc -d -des-ede3-cbc -K <同样的 48 位十六进制密钥> -iv 0102030405060708 -in cipher.bin -out plain.txt

-K 必须写成 48 位十六进制(24 字节),-iv 是 16 位十六进制(8 字节)。OpenSSL 默认使用 PKCS#7 填充,与本工具的默认值一致。

为什么建议直接换成 AES

3DES 的软件实现通常比 AES 慢 3 到 6 倍:它要做三次 DES 运算,而 AES 在现代 CPU 上有专门的硬件指令(AES-NI),可以做到每字节不到 1 个时钟周期。再加上 64 位分组带来的碰撞风险,以及已被 NIST 正式弃用的现状,除非是为了兼容存量数据,否则没有理由继续选择 3DES。

安全提示

  • 3DES 已被 NIST 弃用,仅建议用于兼容存量系统。
  • 新的业务系统请优先选择 AES-256-GCM 或国密 SM4,并配合完善的密钥管理方案。
  • 本工具所有运算都在浏览器本地完成,密钥与数据不会离开你的设备。

常见问题 FAQ

密文支持哪些编码?

支持 Hex 与 Base64。解密时选择的编码必须与加密时一致,否则会提示密文不合法或长度不是分组的整数倍。

NoPadding 模式有什么限制?

明文长度必须是 8 字节的整数倍,否则本工具会直接报错,而不是给出错误结果。

ZeroPadding 与 PKCS#7 有什么区别?

PKCS#7 总是填充且可自校验,解密端能准确去除;ZeroPadding 只在未对齐时补 0x00,原文本身以 0x00 结尾时无法区分,容易在解密结果末尾留下 NUL 字节。

3DES 还有必要使用吗?

NIST 已于 2023 年正式弃用 3DES,新系统请直接使用 AES 或国密 SM4。本工具主要面向存量系统对接与历史数据解析。

为什么加密同样的明文每次结果不同?

因为向量是随机的。CBC / CFB / OFB / CTR 下 IV 变化会直接改变密文,这是正常且更安全的表现。想复现固定结果,请固定 IV 或改用 ECB。

Java 的 DESede 能和这个工具互通吗?

能。Java 使用 "DESede/CBC/PKCS5Padding" 时,PKCS5Padding 在 8 字节分组下与 PKCS#7 等价,只要 24 字节密钥与 8 字节 IV 相同即可互通。

支持哪些加密模式?

支持 ECB、CBC、CFB、OFB、CTR 五种。CBC 兼容性最好;ECB 相同明文块会得到相同密文块;CFB / OFB / CTR 是流式模式,不使用填充。

密钥和明文会被上传到服务器吗?

不会。所有运算都在浏览器本地完成,密钥、向量、明文、密文都不会离开你的设备。

3DES 的向量是 8 字节还是 16 字节?

8 字节。3DES 的分组仍是 64 位,所以 IV 也是 8 字节,这一点最容易填错。

为什么本工具不支持 16 字节的 3DES 密钥?

16 字节是 2-key 3DES(K1 / K2 / K1)的写法。为了保持「密钥长度即算法参数」的清晰对应,本工具只接受标准 24 字节形式。若你手上只有 16 字节密钥,请自行拼成 K1 + K2 + K1 的 24 字节形式再输入。

3DES 的有效强度是多少?

约 112 位,而不是 168 位。因为存在中间相遇攻击,实际强度是子密钥长度之和减去一个 8 字节(56 位)的量级。

3DES 的密钥为什么是 24 字节?

3DES 用三把 8 字节子密钥 K1 / K2 / K3,依次做「加密 — 解密 — 加密」三次运算,所以需要 24 字节。当三把子密钥相同时它退化成普通 DES,可以兼容旧数据。