python 对称加密 Crypto (AES) 以及国密算法
1, python 对称加密使用 pycryptodome 库,
安装可能会失败:需要系统安装依赖Visual C++ Build Tools, windows 只能使用pycryptodome, linux 可以使用pycrypto 和 pycryptodome
pip uninstall crypto
pip uninstall pycrypto
pip install pycryptodome
AES 简单使用方式(不推荐,但是有的系统还在使用,如果对接其他系统可能必须要用)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import ast from base64 import b64encode from Crypto.Util.Padding import pad from base64 import b64decode from Crypto.Cipher import AES from Crypto.Util.Padding import unpad # key只能传入bytes key = 'ssssssssssfsssssssssssssssfsssss'.encode() def pad_key(key): # 限制只能传入长度为16,32 while len(key) % 16 != 0: key += b' ' #不足的用空格补全 return key def get_sign(data): cipher = AES.new(key, AES.MODE_CBC) ct_bytes = cipher.encrypt(pad(data, AES.block_size)) iv = b64encode(cipher.iv).decode('utf-8') ct = b64encode(ct_bytes).decode('utf-8') print(iv) print(ct) return iv,ct # 返回偏移和加密数据 def de_sign(iv, sign): iv = b64decode(iv) ct = b64decode(sign) cipher = AES.new(key, AES.MODE_CBC, iv) pt = unpad(cipher.decrypt(ct), AES.block_size) return ast.literal_eval(str(pt, encoding='utf-8')) if __name__ == '__main__': data = str({'name':'xxx','um':"xxx"}).encode() iv,sign = get_sign(data) data = de_sign(iv,sign) print(data)
适用于对数据加传输
国密算法(推荐使用,支持对称,非对称,hash等) gmssl, snowland-smx
snowland-smx 是基于gmssl 封装的,添加了公钥,私钥的生成,使用更方便
官方文档:https://pypi.org/project/snowland-smx/
github :https://github.com/ASTARCHEN/snowland-smx-python
安装:pip install snowland-smx
使用方式看网官方文档。