不要使用 pycrypto
,要使用 pycryptodome
。来源:https://stackoverflow.com/questions/70705404/systemerror-py-ssize-t-clean-macro-must-be-defined-for-formats
1. 安装依赖包
pip3 install pycryptodome -i https://pypi.douban.com/simple/ --trusted-host pypi.douban.com
2.1. AES.MODE_CBC 对称加密
CBC 对称加密
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
def encrypt_msg(msg, key):
data = msg.encode()
key = key.encode()
iv = "some text string" # 16 bytes 的字符串
cipher = AES.new(pad(key, AES.block_size), AES.MODE_CBC, iv=iv)
ciphered_data = cipher.encrypt(pad(data, AES.block_size)) # 加密后的byte数据
return base64.b64encode(ciphered_data).decode() # base64 后返回字符串
CBC 对称解密
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
def decrypt_msg(msg, key):
data = base64.b64decode(msg.encode())
key = key.encode()
iv = "some text string" # 16 bytes 的字符串
cipher = AES.new(pad(key, AES.block_size), AES.MODE_CBC, iv=iv)
original_data = unpad(cipher.decrypt(data), AES.block_size)
return original_data # 解密后的数据
支持的加密算法列表: - MODE_CBC - MODE_CFB - MODE_OFB - MODE_OPENPGP
参考:https://officeguide.cc/python-pycryptodome-aes-symmetric-encryption-tutorial-examples/