🔐 DES加解密
纯JS实现 · CBC/ECB模式 · Base64/Hex输出
纯JS实现 · CBC/ECB模式 · Base64/Hex输出
DES(数据加密标准)是一种分组密码算法,使用56位有效密钥对64位(8字节)数据块进行加密。由IBM研发,1977年被NIST采用,曾是使用最广泛的加密标准。如今因密钥太短已被AES取代,主要用于学习和兼容旧系统。
DES的56位密钥空间约2^56,用专用硬件可在数小时到数天内暴力穷举攻破。1999年EFF就曾用22小时破解过。所以DES现在完全不推荐用于保护敏感数据,请改用AES-256。
DES使用8字节(64位)密钥,但实际有效位只有56位——每个字节的最高位是奇偶校验位。工具会自动取输入的前8字节作为密钥,不足补零,多余忽略。
ECB简单,但相同明文块产出相同密文,有模式泄露风险;CBC需要8字节IV,每个块先和上一密文块异或再加密,安全性更高。推荐默认用CBC。
很可能原因:密钥与加密时不一致、IV不同、密文被改动、或用错输出格式(密文是Base64却用Hex解析)。DES是非流式分组加密,任何一位错都会导致整块解不开。
3DES就是把DES执行三次(加密-解密-加密),密钥长度变为112或168位,安全性显著提升,但速度慢。很多旧银行系统还在用3DES,正在向AES迁移。
核心是密钥太短。AES-128的密钥空间是DES的2^72倍,暴力破解在物理上不可行;同时AES速度快、实现更简单干净。所以AES全面取代了DES。
DES按64位(8字节)分块,每块经过初始置换、16轮Feistel迭代、最终置换三个大步骤。
每轮中,右半32位先扩展成48位,与48位轮密钥异或,再经过8个S盒压缩回32位,然后与左半异或并交换。如此反复16轮,把明文彻底扩散。
密钥调度:56位主密钥分两半各28位,每轮左移1或2位,再压缩置换出48位轮密钥,共生成16个轮密钥。
| 参数 | 数值 |
|---|---|
| 分组长度 | 64位(8字节) |
| 有效密钥 | 56位 |
| CPU密钥 | 64位(含8位校验) |
| 加密轮数 | 16轮 |
| S盒个数 | 8个(每个6→4位) |
| 现役状态 | 已被AES取代 |
根本原因是密钥空间太小。56位意味着约7.2×10^16种可能,放在今天看来微不足道。
除此之外,DES还存在弱密钥、半弱密钥、互补性等理论弱点,进一步加强了被淘汰的理由。
1997年NIST面向全球征集AES候选算法,1998年选出15个初选,最终Rijndael算法在2000年胜出,命名为AES。
| 维度 | DES | AES |
|---|---|---|
| 分组长度 | 64位 | 128位 |
| 密钥长度 | 56位 | 128/192/256位 |
| 结构 | Feistel网络 | 代替置换网络 |
| 轮数 | 16轮 | 10/12/14轮 |
| 速度 | 较慢 | 快 |
| 现状 | 已淘汰 | 全球标准 |
AES不仅更安全,硬件实现也更高效,是当代对称加密的绝对主流。
但请记住:任何新项目都不应再选用DES,一律用AES。
| 明文字节 | 补位后 | Hex密文 | Base64密文 |
|---|---|---|---|
| 1字节 | 8字节 | 16字符 | 12字符 |
| 7字节 | 8字节 | 16字符 | 12字符 |
| 8字节 | 16字节 | 32字符 | 24字符 |
| 100字节 | 104字节 | 208字符 | 140字符 |
| 年份 | 事件 |
|---|---|
| 1977 | DES被NIST定为标准 |
| 1999 | DES在22小时内被破解 |
| 2000 | Rijndael胜出,命名AES |
| 2001 | NIST正式发布AES标准 |
| 2005 | 3DES替代DES用于FIPS |
1. 输入待加密/解密的文本。
2. 输入密钥(8字符)。
3. 选择加密模式(CBC或ECB)。
4. 选择输出格式。
5. 点击加密或解密按钮。