DES加解密

DES对称加密算法,支持DES和3DES,提供加密和解密功能
DES简介
DES(Data Encryption Standard)是一种对称加密算法,由美国国家标准局(NIST)于1977年发布。DES使用56位密钥对64位的数据块进行加密,而3DES(Triple DES)则是对DES的增强版本,通过三次DES加密来提高安全性。
算法特点
  • 对称加密:加密和解密使用相同的密钥
  • 分组密码:将数据分成固定长度的块进行加密
  • 可逆性:加密后的数据可以通过密钥解密还原
  • 3DES增强:通过三次加密提高安全性
算法版本
  • DES:使用56位密钥,加密强度较低,已不再推荐用于安全场景
  • 3DES:使用168位密钥(三个56位密钥),提供更高的安全性
常见用途
  • 数据加密传输
  • 文件加密存储
  • 密码保护
  • 金融交易安全
代码示例
Python:
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad

def des_encrypt(key, data):
    cipher = DES.new(key.encode(), DES.MODE_ECB)
    padded_data = pad(data.encode(), DES.block_size)
    return cipher.encrypt(padded_data).hex()

def des_decrypt(key, encrypted_data):
    cipher = DES.new(key.encode(), DES.MODE_ECB)
    decrypted_data = cipher.decrypt(bytes.fromhex(encrypted_data))
    return unpad(decrypted_data, DES.block_size).decode()
        
Java:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class DESExample {
    public static String encrypt(String key, String data) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes()));
    }

    public static String decrypt(String key, String encryptedData) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(encryptedData)));
    }
}
        
JavaScript:
const CryptoJS = require('crypto-js');

function desEncrypt(key, data) {
    return CryptoJS.DES.encrypt(data, key).toString();
}

function desDecrypt(key, encryptedData) {
    const bytes = CryptoJS.DES.decrypt(encryptedData, key);
    return bytes.toString(CryptoJS.enc.Utf8);
}
        
PHP:
function desEncrypt($key, $data) {
    return openssl_encrypt($data, 'DES-ECB', $key, 0);
}

function desDecrypt($key, $encryptedData) {
    return openssl_decrypt($encryptedData, 'DES-ECB', $key, 0);
}
        
注意事项
  • DES密钥长度必须为8位,3DES密钥长度必须为24位
  • DES已不再推荐用于安全场景,建议使用3DES或更现代的加密算法
  • 加密和解密必须使用相同的密钥
  • 请妥善保管密钥,密钥泄露将导致数据被破解