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或更现代的加密算法
- 加密和解密必须使用相同的密钥
- 请妥善保管密钥,密钥泄露将导致数据被破解