DES 密钥长度
8 / 16 / 24 字节 单 DES 8 字节(有效 56 位);3DES 两种:16 字节(2 键)和 24 字节(3 键)。名义密钥材料 112/168 位,NIST 有效安全强度约 80/112 位(SP 800-57)。本工具按字节数自动识别,其他长度报错。
DES在线加密解密、3DES解密:支持单 DES、3DES(2 键/3 键)、ECB/CBC、PKCS#7(PKCS5Padding)/Zero/None。密钥长度严格校验,绝不静默截断;解出的密文可一键生成等价 OpenSSL 命令。浏览器本地计算,密钥和数据不上传。附 FIPS 81 测试向量核对你的实现。
ECB 会把相同的明文块加密成相同的密文块,泄露模式——只用于对接要求 ECB 的系统。
—
命令包含你输入的密钥。
| 密钥(单 DES) | 0123456789abcdef |
|---|---|
| 明文 | 4e6f772069732074 |
| 密文(ECB,无填充) | 3fa40e8a984d4815 |
由构建加密工具的开发者撰写并审核。本页引用的每个密文和字节数都由工具引擎实算,并由测试逐项核对。
8 / 16 / 24 字节 单 DES 8 字节(有效 56 位);3DES 两种:16 字节(2 键)和 24 字节(3 键)。名义密钥材料 112/168 位,NIST 有效安全强度约 80/112 位(SP 800-57)。本工具按字节数自动识别,其他长度报错。
3fa40e8a984d4815 密钥 0123456789abcdef、明文 "Now is t"(hex 4e6f772069732074)时,单 DES ECB 无填充输出 3fa40e8a984d4815。
8 字节 8 字节(16 位 hex),仅 CBC 需要,ECB 不用。注意与 AES 的 16 字节 IV 区分。
= PKCS#7 对 DES 而言就是 PKCS#7——同一个填充算法,PKCS#5 只是历史名(它只定义了 8 字节分组,恰好等于 DES 分组)。
仅遗留互通 不安全。单 DES 2005 年退役,3DES 2023 年在 SP 800-131A Rev.2 弃用。只用于遗留系统互通,新系统用 AES-256 或 SM4。
DES(Data Encryption Standard)是 1977 年 NIST 前身采纳的对称加密算法(分组密码),基于 IBM 的 Lucifer 方案修改而成。它处理 64 位(8 字节)分组,密钥名义 64 位、有效 56 位,经过 16 轮 Feistel 结构迭代。
3DES(TDEA,三重 DES)是把 DES 串三遍来补救密钥太短:C = E_K3(D_K2(E_K1(P))),中间用解密是为了兼容单 DES——K1=K2=K3 时整个链条坍缩为 E_K1(P)。2 键形态(K3=K1)有效强度约 112 位,是遗留银行系统里最常见的形态。
DES 于 2005 年被 NIST 退役(FIPS 46-3 附函),3DES 于 2023 年在 SP 800-131A Rev.2 中被弃用。它们今天存在的唯一理由是遗留系统互通:银行清算报文、支付网关、90 年代至 2000 年代的 Java/.NET/PHP 系统仍在运行 DES 时代的加密。新设计一律用 AES-256 或 SM4。
# OpenSSL single DES (legacy provider) openssl enc -des-ecb -provider legacy -provider default -K 0123456789abcdef -nopad # 3-key 3DES CBC + PKCS#7 (default provider) openssl enc -des-ede3-cbc -K <48 hex digits> -iv <16 hex digits> -base64 -A
8/16/24 字节自动识别为单 DES / 2 键 / 3 键 3DES,其他长度直接报错。不像 CryptoJS 会静默截断、openssl enc -K 会截断或补零——那是联调对不上的头号来源。
页面底部的测试向量由构建时的同一引擎算出,爬虫无需执行 JS 即可读到参考值,页面数字与交互结果不可能漂移。
当前参数组合随时可展开一条能在 OpenSSL 3 上复现结果的 openssl enc 命令,含单 DES 的 legacy provider 参数。发给对端,最快定位参数分歧。
DES 时代的 Java getBytes() 在中文 Windows JDK 上产出 GBK。本工具加密与解密都可选 GBK,处理老系统的中文明文不用先转码。
纯 TypeScript 实现、零依赖、零网络请求。密钥和明文不离开设备,断网可用——密钥类工具唯一正确的形态。
"DES" 默认 ECB + PKCS5Padding Cipher.getInstance("DES") 等价于 DES/ECB/PKCS5Padding;"DESede" 是 3DES 但只接受 24 字节密钥——2 键要自己拼 K1‖K2‖K1。PKCS5Padding 对 DES 就是 PKCS#7。忘传 IV 时加密自动随机 IV(getIV() 取回)、解密抛 Parameters missing。
des-ede3-cbc / des-ede-cbc 算法名沿用 OpenSSL:des-ede3 是 ECB 三重、des-ede3-cbc 是 CBC。$options=0(缺省)输出 Base64 文本,OPENSSL_RAW_DATA 才是原始字节。密钥过短静默补零;IV 传空会告警后用全零 IV 继续。
-des-ede3-cbc 默认可用 单 DES 要加 -provider legacy -provider default(部分构建没编译 legacy)。-K/-iv 用 hex,默认 PKCS#7,-nopad 关闭。-K 超长静默截断(有 warning)。
传 8 字节 raw 密钥(WordArray)可用;长度不对静默补零或截断(4 字节补零、10 字节截断,均不报错)。字符串"密钥"走口令派生(MD5+随机盐,输出带 Salted__ 且每次不同)。CBC 不传 IV 直接 TypeError 崩溃而不是零 IV。TripleDES 传 8 字节密钥会静默当单 DES 用。
TripleDES 默认 CBC + PKCS7 TripleDESCryptoServiceProvider:Mode 默认 CBC、Padding 默认 PKCS7、Key 接受 16 或 24 字节(DES 还接受 8 字节)。.NET 会拒绝弱键(先归一化奇偶位再比对弱键表,全零密钥直接抛异常)——其他库都不查,迁移时注意。
des.NewCipher 只给 8 字节密钥的块接口,模式要自己套 cipher.NewCBCEncrypter 等。3DES 用 des.NewTripleDESCipher(24 字节)。IV 长度校验比其他语言严。
密钥 0123456789abcdef,明文(Hex)4e6f772069732074
3fa40e8a984d4815
明文是 ASCII 的 "Now is t"。这是 FIPS 81 的教科书向量,页面底部表格由构建时的同一引擎实算——如果你的 DES 实现对同一输入算不出这个值,说明实现有 bug。
密钥 0123456789abcdeffedcba9876543210(16 字节),IV fedcba9876543210,明文:DES 联调测试:订单号 20260927-0042
T7rjLibLF4a9iWamML/d+Ti0g899PrHsrUzqkbUGHYEQZxPLUyRmjCtXdfGh4Mq9
16 字节密钥按 2 键 3DES 处理(K1=前 8 字节,K2=后 8 字节,K3=K1,即 EDE2)。PKCS#7 在 8 字节分组上就是 Java 对 DES 说的 "PKCS5Padding"——同一个方案,只是分组大小不同。
密钥 0123456789abcdef23456789abcdef010456789abcdef012(24 字节),IV fedcba9876543210,明文:hello des
DhDQX9sfxKOirZ8eyqT7Jg==
24 字节密钥是完整的三键 EDE3:C = E_K3(D_K2(E_K1(P)))。这是三种密钥长度里唯一没有退化形态的用法——2 键和 K1=K2=K3 都会退化成更弱的等价物。
与 Java DES/ECB/PKCS5Padding 联调选 ECB + PKCS#7;与 openssl enc -des-ede3-cbc 联调选 CBC + PKCS#7。对端用老 PHP mcrypt 常见 Zero 填充。
字节数决定算法形态:8 字节单 DES、16 字节 2 键 3DES、24 字节 3 键 3DES。选择 Hex、文本或 Base64 格式,页面会显示实际字节数与识别出的形态。长度不对会直接报错,不会截断。
ECB 不需要 IV。IV 必须正好 8 字节——注意是 16 位十六进制,不是 AES 的 32 位。「随机生成」按钮可产出新 IV。
加密时输入文本(UTF-8/GBK)或 Hex;解密时输入 Base64 或 Hex 密文。结果实时更新,可一键复制、一键切换到解密验证往返。
右侧折叠区给出与当前参数完全等价的 openssl enc 命令(含密钥),单 DES 的命令带 -provider legacy -provider default。发给对端复现,能最快定位谁的参数不对。
对端给的"DES 密钥"是 32 位 hex 字符——那是 16 字节,属于 2 键 3DES,不是单 DES。反过来拿 24 字节密钥给只支持 2 键的系统也会失败。
密钥 0123456789abcdeffedcba9876543210(16 字节)选单 DES 解密 → 报错「密钥必须正好 8 字节」
同一密钥按 16 字节(2 键 3DES)解密 → 正常解出
Java 对 DES 写 "PKCS5Padding",执行的却是 PKCS#7 算法(PKCS#5 只定义了 8 字节分组,恰好等于 DES 分组,故历史沿用此名)。在工具里选 None 或 Zero 去对 Java 密文必然失败。
对 JCE `DES/ECB/PKCS5Padding` 的密文选「无填充」→ 尾部多出 8 个字节的填充残留或报 bad-padding
选 PKCS#7(Java PKCS5Padding)→ 干净解出
DES 分组是 8 字节,IV 也是 8 字节。从 AES 代码迁移时把 32 位 hex 的 IV 粘进来会报长度错误;反之只给 8 位 hex 的 IV 会被补零误解。
IV 00000000000000000000000000000000(32 位 hex)→ 报错「IV 必须 8 字节」
IV 0000000000000000(16 位 hex)→ 通过
多块密文用错 IV 解密不报错——只有第一个 8 字节块乱码,后面照常解出(IV 只混进首块,填充在尾块校验)。看到「开头几个字乱、后面都对」时,先查 IV 再查密钥;单块密文则会让填充破坏、报 bad decrypt。
多块密文 + 错误 IV → 开头 8 字节乱码、其余正常,用户误判为「密钥不对」
只改 IV(密钥不动)→ 首块恢复正常即确认是 IV 的问题
-K 超长时 OpenSSL 只取需要的字节数并打印一行 warning(脚本里容易漏看)。对方说"密钥是这 48 位 hex"而实际加密用了前 16 位时,工具里按原密钥解会失败。
shell 里 `-K <49位hex>`,OpenSSL 提示 hex string too long, ignoring excess——脚本吞掉了警告
用本工具的等价命令生成正确的 `-K`(严格长度),再和对方逐字节核对密钥
OpenSSL 3 默认 provider 没有 des-ecb/des-cbc,直接跑会报 digital envelope routines::unsupported。要么加 -provider legacy -provider default,要么改用 des-ede3 传 K‖K‖K(代数上等于单 DES)。
openssl enc -des-ecb -K … → Error: unsupported
openssl enc -des-ecb -provider legacy -provider default -K …(或 des-ede3-ecb -K <K‖K‖K>)
Cipher.getInstance("DES/ECB/PKCS5Padding") 的产出、openssl_encrypt(..., 'des-ede3-cbc', ...) 的产出与本工具逐项对照,确认迁移后字节级一致再上线。2 键/3 键形态按密钥字节数自动识别,不用猜。03 03 03),整块时补一整块——这是 Java 对 DES 说的 "PKCS5Padding"。Zero 填充补零到块边界,明文本身以 0x00 结尾时有损。None 要求输入正好是 8 的倍数。-provider legacy -provider default,部分发行版/Node 内置版本根本没编译它。3DES(des-ede/des-ede3)仍在默认 provider。本工具纯 TS 实现不受此限制。PKCS5Padding 对 DES 而言就是 PKCS#7,别在工具里选成 None)。页面右侧会给出与当前参数等价的 OpenSSL 命令,拿它和对方核对最省事。 openssl enc -K 都会静默截断或补零,那是联调出错的头号来源。 DES/ECB/PKCS5Padding 对应本工具的什么组合?Cipher.getInstance("DES/ECB/PKCS5Padding") 加密的结果,在本工具选 ECB + PKCS#7(8 字节单 DES 密钥)即可解出。⚠️ 注意 Java 的 3DES(DESede)只接受 24 字节密钥——2 键形态要自己把 K1‖K2 拼成 K1‖K2‖K1 传进去。 openssl_encrypt 和 Java DES 的 des-ede3 系列怎么对应?des-ede3-cbc 是 3 键 3DES + CBC,des-ede3-ecb 是 3 键 + ECB;des-ede-cbc 是 2 键形态。密钥传 24 字节走 3 键、16 字节走 2 键。 "DES" 裸名默认 ECB;OpenSSL 的无模式后缀名 des-ede3/des-ede 是 ECB(CBC 别名是 -des3);PHP openssl_encrypt 必须显式写算法名,易混淆的是它默认输出 Base64 文本而非原始字节;③ 填充——老 PHP mcrypt 常用 Zero 填充,JCE 用 PKCS#5/PKCS#7;④ 编码——密文是 Hex 还是 Base64,大小写是否一致;⑤ CryptoJS 口令形态——把字符串当"密钥"传给 CryptoJS 时它走口令派生(MD5 + 随机盐,输出带 Salted__ 前缀且每次不同),和 raw 密钥完全是两回事,这是"同一段代码两次结果不同"的头号来源。本工具可以逐项切换对照,右侧的 OpenSSL 等价命令可以直接发给对方复现。 安全工具
在线解密 AES —— 支持 GCM/CBC/CTR、口令或原始密钥,自动识别 OpenSSL 与 CryptoJS 的 "U2FsdGVkX1" 格式。100% 浏览器本地运行,密钥永不离开页面。
安全工具
免费在线 AES 加密工具 — 支持 AES-128/192/256、GCM/CBC/CTR 模式,可用口令(PBKDF2)或原始密钥。100% 浏览器本地运行,不上传任何数据。
安全工具
在线生成并验证 bcrypt 密码哈希——可调成本因子,支持 $2b$/$2a$/$2y$ 前缀。100% 在浏览器中运行,密码绝不上传。
安全工具
CRC校验在线计算:粘贴十六进制或文本,一次算出 CRC-8/16/32 共 63 个变体,含 CRC16 Modbus。设备返回的值对不上时填进反查框,直接告诉你是哪个变体——MODBUS、CCITT-FALSE、XMODEM、KERMIT。全程浏览器本地计算。
安全工具
免费在线 HMAC 生成与校验工具。支持文本、Hex 或 Base64 密钥计算 HMAC-SHA256/SHA1/SHA384/SHA512,输出 Hex/Base64/Base64URL。100% 在浏览器中运行 —— 密钥永不离开页面。
安全工具
免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。