DES 加解密
字符数: 0 | 字节数: 0
长度: 0 字符
常用配置模板
代码示例(DES-CBC-PKCS7-Base64)
// 使用 CryptoJS 库
const CryptoJS = require('crypto-js');
// DES 加密
function desEncrypt(text, key, iv) {
const encrypted = CryptoJS.DES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {
iv: CryptoJS.enc.Utf8.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString(); // Base64
}
// 3DES 用 CryptoJS.TripleDES
const enc3 = CryptoJS.TripleDES.encrypt(text, keyWordArray, { iv: ivWordArray, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
from Crypto.Cipher import DES, DES3
from Crypto.Util.Padding import pad, unpad
import base64
def des_encrypt(text, key, iv):
cipher = DES.new(key.encode('utf-8'), DES.MODE_CBC, iv.encode('utf-8'))
padded = pad(text.encode('utf-8'), DES.block_size)
return base64.b64encode(cipher.encrypt(padded)).decode()
def des3_encrypt(text, key, iv):
cipher = DES3.new(key.encode('utf-8'), DES3.MODE_CBC, iv.encode('utf-8'))
padded = pad(text.encode('utf-8'), DES3.block_size)
return base64.b64encode(cipher.encrypt(padded)).decode()
# pip install pycryptodome
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;
public class DESUtil {
public static String encrypt(String text, String key, String iv) throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec dks = new DESKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, factory.generateSecret(dks), ivSpec);
return Base64.getEncoder().encodeToString(cipher.doFinal(text.getBytes("UTF-8")));
}
}
package main
import (
"crypto/cipher"
"crypto/des"
"encoding/base64"
)
func DesEncrypt(text, key, iv string) (string, error) {
block, err := des.NewCipher([]byte(key)) // 8 字节
if err != nil { return "", err }
plaintext := pkcs7Pad([]byte(text), block.BlockSize())
mode := cipher.NewCBCEncrypter(block, []byte(iv))
ct := make([]byte, len(plaintext))
mode.CryptBlocks(ct, plaintext)
return base64.StdEncoding.EncodeToString(ct), nil
}
// 3DES: 用 des.NewTripleDESCipher(24 字节密钥)
<?php
function desEncrypt($text, $key, $iv) {
$encrypted = openssl_encrypt($text, 'DES-CBC', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($encrypted);
}
function des3Encrypt($text, $key, $iv) {
$encrypted = openssl_encrypt($text, 'DES-EDE3-CBC', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($encrypted);
}
?>
DES 加密模式对比
| 模式 | 需要IV | 并行处理 | 安全性 | 特点 |
|---|---|---|---|---|
| CBC | 是 | 仅解密 | 推荐 | 每块异或前一块,最常用 |
| ECB | 否 | 是 | 不推荐 | 简单,相同明文产生相同密文 |
| CTR | 是 | 是 | 推荐 | 流加密,性能高 |
| CFB | 是 | 仅解密 | 可用 | 流加密,自同步 |
| OFB | 是 | 否 | 可用 | 流加密,错误不传播 |
DES 与 3DES 是什么?
DES (Data Encryption Standard) 是 IBM 在 1970 年代开发、1977 年被美国 NIST 采纳的对称分组密码,使用 56 位有效密钥(8 字节中每字节最高位为奇偶校验位),分组长度 64 位(8 字节)。1998 年 EFF 用专用硬件 22 小时暴力破解了 DES,因此纯 DES 已不再安全,仅用于教学或兼容遗留系统。
3DES(Triple DES、TDEA)通过对每个数据块连续运行 3 次 DES 加密以提高安全性,密钥长度 16(K1=K3,112 位有效)或 24(K1≠K2≠K3,168 位有效)字节。NIST 自 2024 年起禁止 3DES 用于新系统,建议优先使用 AES。本工具同时支持 DES 与 3DES,方便对接遗留接口。
3DES(Triple DES、TDEA)通过对每个数据块连续运行 3 次 DES 加密以提高安全性,密钥长度 16(K1=K3,112 位有效)或 24(K1≠K2≠K3,168 位有效)字节。NIST 自 2024 年起禁止 3DES 用于新系统,建议优先使用 AES。本工具同时支持 DES 与 3DES,方便对接遗留接口。
参数说明
🔑 密钥 (Key)
DES 需要 8 字节;3DES 16 或 24 字节。密钥需双方约定并保密
📐 偏移量 (IV)
初始化向量,固定 8 字节(DES 分组长度)。CBC/CTR/CFB/OFB 模式需要,ECB 不需要
📦 填充方式 (Padding)
DES/3DES 要求明文长度是 8 字节整数倍,PKCS7 是默认且最通用的填充
🔄 加密模式 (Mode)
决定如何处理多个数据块。生产环境优先 CBC 或 CTR,避免 ECB
DES 需要 8 字节;3DES 16 或 24 字节。密钥需双方约定并保密
📐 偏移量 (IV)
初始化向量,固定 8 字节(DES 分组长度)。CBC/CTR/CFB/OFB 模式需要,ECB 不需要
📦 填充方式 (Padding)
DES/3DES 要求明文长度是 8 字节整数倍,PKCS7 是默认且最通用的填充
🔄 加密模式 (Mode)
决定如何处理多个数据块。生产环境优先 CBC 或 CTR,避免 ECB
使用建议
✅ 推荐做法
- 新项目优先使用 AES-256,仅在对接遗留接口时使用 DES/3DES
- 使用 CBC 或 CTR 模式,每次加密生成全新随机 IV
- 密钥通过安全通道交换,避免硬编码在代码中
- 用 HMAC 校验密文完整性以防篡改
❌ 避免做法
- 不要使用 ECB 模式加密敏感数据
- 不要复用 IV
- 不要使用弱密码(如全 0、默认值)作为密钥
- 不要在新业务中使用纯 DES(已被破解)
- 新项目优先使用 AES-256,仅在对接遗留接口时使用 DES/3DES
- 使用 CBC 或 CTR 模式,每次加密生成全新随机 IV
- 密钥通过安全通道交换,避免硬编码在代码中
- 用 HMAC 校验密文完整性以防篡改
❌ 避免做法
- 不要使用 ECB 模式加密敏感数据
- 不要复用 IV
- 不要使用弱密码(如全 0、默认值)作为密钥
- 不要在新业务中使用纯 DES(已被破解)
安全说明
🛡️ 本地处理
所有加解密计算均在浏览器内完成,输入与密钥不会上传至任何服务器
🔐 密钥安全
请妥善保管您的密钥,密钥丢失将无法恢复数据
💡 跨平台兼容
本工具基于 CryptoJS 实现,与 JavaScript / Python / Java / Go / PHP 等主流语言的 DES 实现兼容,只需保持算法、模式、填充、密钥、IV、编码一致
所有加解密计算均在浏览器内完成,输入与密钥不会上传至任何服务器
🔐 密钥安全
请妥善保管您的密钥,密钥丢失将无法恢复数据
💡 跨平台兼容
本工具基于 CryptoJS 实现,与 JavaScript / Python / Java / Go / PHP 等主流语言的 DES 实现兼容,只需保持算法、模式、填充、密钥、IV、编码一致
