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 简单使用方式(不推荐,但是有的系统还在使用,如果对接其他系统可能必须要用)

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)
View Code

  适用于对数据加传输

 

  国密算法(推荐使用,支持对称,非对称,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

   使用方式看网官方文档。

posted @ 2021-11-05 17:00  王军的个人博客  阅读(436)  评论(0编辑  收藏  举报