# 常见的对称加密除了 AES
,还有 DES
,下面介绍一下 DES
中的 ECB
和 CBC
加密方式
# 使用
pydes
- 安装
pyDes
模块
pip install pyDes
python
实现代码
from pyDes import des, CBC, PAD_PKCS5
import base64
def des_CBC(s, encry=True):
"""
DES 加密
:param s: 原始字符串
:param encry:
- 默认 True 加密
- False 解密
:return: 加密后字符串,16进制
"""
# k 必须传入 8 位
key = "6HPjSZFH"
iv = "YdVi_XPU"
cbc = des(key, CBC, iv, pad=None, padmode=PAD_PKCS5) # 如果是 ECB 这里换成 ECB 即可
# 加密
if encry:
en_str = cbc.encrypt(s)
return base64.b64encode(en_str).decode()
# 解密
else:
de_str = base64.b64decode(s)
return cbc.decrypt(de_str).decode('utf8')
- 安装
# 使用
crypto
模块安装模块
pip install pycryptodome # 支持 py2 和 py3
代码
import base64
from Crypto.Cipher import DES
def des_ECB(s, encry=True):
"""
DES ECB加密
:param s: 原始字符串
:param encry: True->>加密,False->>解密
:return: 加密 或者 解密后的字符串
"""
key = "2f5bc41a"
des = DES.new(key, DES.MODE_ECB) # 初始化 ECB 模式的实例, 如果是 CBC 模式,这里换成 MODE_CBC 即可,q
# 加密
if encry:
count = len(s.encode('utf-8'))
diff = DES.block_size - (count % DES.block_size) # 补位数,使原始字串为 block_size 的倍数 block_size 默认是 16
data = s + (chr(diff) * diff)
ret = des.encrypt(data.encode("utf8"))
return str(base64.b64encode(ret))
# 解密
else:
# 去除填充的字符
unpad = lambda info: info[0:-ord(info[-1])]
ret = base64.b64decode(s.encode("utf8"))
return unpad(des.decrypt(ret).decode("utf8"))
# 如果是
hex
格式,把base64
换成下列函数加解密即可from binascii import a2b_hex, b2a_hex
# b2a_hex 对应 b64encode 编码
# a2b_hex 对应 b64decode 解码