DES 加密 / 解密

加密 / 解密 明文 → 密文
密钥、向量与明文只在浏览器本地参与运算,不会发送到服务器。 DES 的密钥固定 8 字节,其中 8 位是奇偶校验位,实际有效强度只有 56 位; 它早已不适合保护敏感数据,保留在这里主要是为了兼容老系统与理解分组密码的原理。
结果
填好密钥与向量后点「加密」,结果会显示在这里
在线 DES 加解密工具,支持 ECB、CBC、CFB、OFB、CTR 多种模式与 PKCS#7 等填充方式,可配置 8 字节密钥与向量,全部在浏览器本地完成。

工具简介

DES(Data Encryption Standard,数据加密标准)是 1977 年发布的第一个公开分组密码标准,分组与密钥都是 64 位,其中密钥的 8 个字节里每个字节有 1 位奇偶校验位,实际有效密钥强度只有 56 位。以今天的算力,DES 已经可以在很短时间内被穷举破解,本工具保留它主要用于兼容老系统、解析历史报文以及教学演示。

使用步骤

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

参数说明

参数可选值说明
密钥长度8 字节(固定)64 位,含 8 位奇偶校验位,有效强度 56 位
分组长度8 字节(固定)64 位
模式ECB / CBC / CFB / OFB / CTR与 AES 的模式语义相同
填充PKCS#7 / ZeroPadding / ANSI X9.23 / NoPadding流式模式不使用填充
向量 IV8 字节ECB 不使用,其余模式必填

与 AES 的差别

  • 分组只有 64 位(AES 是 128 位),相同的明文块更容易碰撞,CBC 模式下也更容易出现「生日攻击」类的风险。
  • 密钥只有 56 位有效强度,现代硬件可以在数天内完成穷举。
  • 因此 DES 只能用于兼容场景,不要用它保护任何新的敏感数据。

关于填充与模式

  • PKCS#7* 与 **ANSI X9.23** 总是填充,即使已经对齐也会补满一整块;*ZeroPadding 只在未对齐时补 0x00。
  • NoPadding 要求明文长度是 8 字节的整数倍。
  • ECB 对每个分组独立加密,相同明文块必然得到相同密文块,安全性最弱。
  • CBC* 需要随机 IV;*CFB / OFB / CTR 是流式模式,密文长度与明文相同,不涉及填充。

与 OpenSSL 命令行的对应关系

如果服务端用 OpenSSL 实现,下面的命令与本工具等价:

  • 加密:openssl enc -des-cbc -K 0123456789abcdef -iv 0102030405060708 -in plain.txt -out cipher.bin
  • 解密:openssl enc -d -des-cbc -K 0123456789abcdef -iv 0102030405060708 -in cipher.bin -out plain.txt

注意 -K 与 -iv 都必须写成十六进制且不带 0x 前缀,-K 是 16 位十六进制字符(8 字节),-iv 也是 16 位。OpenSSL 默认使用 PKCS#7 填充,与本工具的默认值一致;若要对应 NoPadding,需要额外加 -nopad。

密钥校验位要不要处理

DES 规范里每个密钥字节的最低位是奇偶校验位,用来检测密钥输入错误。实际工程中几乎所有实现(OpenSSL、Java、crypto-js、本工具)都不校验这 8 位,直接按 56 位有效位参与运算。所以 0123456789abcdef 与 0022446688aaccee 这类「校验位不同、有效位相同」的密钥会得到完全相同的密文,这是正常现象,不必担心。

安全提示

  • 新项目请直接使用 AES 或国密 SM4,DES 已被 NIST 于 2005 年正式撤销。
  • 如果你需要与老系统对接,务必先确认对方的填充方式与 IV 传递方式,DES 生态里这两点常常各家不同。
  • 本工具所有运算都在浏览器本地完成,密钥与数据不会离开你的设备。

常见问题 FAQ

这个工具能替代服务端加密吗?

不能。它适合临时验证与接口调试,生产环境请使用服务端密码库,并改用 AES 或国密 SM4 等现代算法。

DES 的分组长度对安全性有什么影响?

分组只有 64 位,在 CBC 等模式下连续加密大量数据时,密文块的碰撞概率随数据量平方增长(生日攻击),这是 DES 系算法被淘汰的原因之一。

NoPadding 模式有什么限制?

明文长度必须是 8 字节的整数倍,否则本工具会直接报错。解密时密文长度同样必须是 8 字节的整数倍。

密文用 Hex 还是 Base64?

两者只是同一段字节的不同表示,解密时必须选择与加密时相同的编码,否则会提示密文不合法或长度不是分组的整数倍。

为什么解密后末尾多了一些奇怪的字符?

多半是填充方式不匹配。如果加密端用的是 ZeroPadding,解密端选了 PKCS#7(或反之),末尾就会残留填充字节。请与对端确认填充方式。

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

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

支持哪些加密模式?

支持 ECB、CBC、CFB、OFB、CTR。CBC 需要随机 IV,兼容性最好;ECB 相同明文块会得到相同密文块,安全性最弱;CFB / OFB / CTR 是流式模式,不需要填充。

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

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

向量 IV 应该填几位?

8 字节(16 位十六进制字符)。DES 的分组是 64 位,所以 IV 也是 8 字节;填 16 字节会被本工具拒绝。

DES 与 3DES 的密文能互相解密吗?

不能直接互解。3DES 使用 24 字节密钥做三次运算,只有在你把 3DES 的三段子密钥设成完全相同(K1 = K2 = K3)时,它的结果才与用 K1 做的单次 DES 一致。

DES 现在还安全吗?

不安全。56 位密钥在现代硬件上可以在数天内被穷举,NIST 已于 2005 年正式撤销 DES。它只适合兼容老系统、解析历史报文和教学演示。

DES 的密钥为什么是 8 字节?

DES 的分组与密钥都是 64 位,即 8 字节。密钥每个字节的最低位是奇偶校验位,因此有效密钥强度只有 56 位。本工具与主流实现一样不校验奇偶位,直接按 56 位有效位使用。