Python中DES加密的实现与常见问题求教
pyDes 和 Crypto.Cipher 里的 des 模块中 key_size 为 8,服务端给的密钥长度是 16 位的,这个要怎么处理啊?求大神指点
Python中DES加密的实现与常见问题求教
3 回复
Python中DES加密的实现与常见问题解析
DES(Data Encryption Standard)是一种对称加密算法,虽然现在已不够安全(被AES取代),但在一些遗留系统或学习场景中仍有应用。Python中常用pycryptodome库实现。
1. 基础加密/解密示例
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
import base64
# 密钥必须为8字节(64位)
key = b'8bytekey' # 长度必须为8
data = "Hello DES加密测试".encode('utf-8')
# 加密
cipher = DES.new(key, DES.MODE_ECB) # ECB模式示例
encrypted = cipher.encrypt(pad(data, DES.block_size))
print("加密结果:", base64.b64encode(encrypted).decode())
# 解密
decrypted = unpad(cipher.decrypt(encrypted), DES.block_size)
print("解密结果:", decrypted.decode('utf-8'))
2. 常见问题与解决方案
- 密钥长度问题:DES密钥必须为8字节,如果不足会自动补全,过长会截断。建议显式控制长度。
- 填充模式:DES是块加密,需处理数据长度不是8字节倍数的情况。推荐用
pad/unpad(PKCS7填充)。 - 模式选择:ECB模式不安全(相同明文块输出相同密文块),建议用CBC模式并配合随机IV:
from Crypto.Cipher import DES
from Crypto.Random import get_random_bytes
key = b'8bytekey'
iv = get_random_bytes(8) # IV长度需与块大小一致(8字节)
cipher = DES.new(key, DES.MODE_CBC, iv)
- 编码问题:加密操作需字节数据,注意字符串编码(如
.encode('utf-8'));存储时可转base64/hex。
3. 重要提醒
- 安全警告:DES因密钥过短(56位有效密钥)易被暴力破解,生产环境请用AES(
Crypto.Cipher.AES)。 - 库安装:使用
pip install pycryptodome安装(不是已废弃的pycrypto)。
总结:用CBC模式+随机IV,注意密钥长度和填充处理。
什么服务端?给的密钥是怎样的?
建议先看看这个 https://lug.ustc.edu.cn/wiki/doc/smart-questions 把问题描述清楚。
什么 什么服务端?什么给的密钥是怎样的?
建议先看看这个 https://blog.m157q.tw/posts/2017/12/21/how-to-answer-questions-in-a-helpful-way-zh-tw/ 把答案搞清楚

