美文网首页
python实现sm2、sm3、sm4算法计算

python实现sm2、sm3、sm4算法计算

作者: 叶叶阿姨 | 来源:发表于2021-09-07 16:02 被阅读0次

    安装:

    pip 安装

    pip install snowland-smx
    

    SM2

    国密公钥加解密签名验签

    a. 密钥生成

    from pysmx.SM2 import generate_keypair
    pk, sk = generate_keypair()
    

    签名

    from pysmx.SM2 import Sign
    len_para = 64
    sig = Sign("你好", sk, '12345678abcdef', len_para)
    

    验签

    from pysmx.SM2 import Verify
    len_para = 64
    Verify(sig, "你好", pk, len_para)
    

    加密

    from pysmx.SM2 import Encrypt
    e = b'hello'
    len_para = 64
    C = Encrypt(e, pk, len_para, 0)  # 此处的1代表e是否是16进制字符串
    

    解密

    from  pysmx.SM2 import Decrypt
    len_para = 64
    m = Decrypt(C, sk, len_para)
    

    SM3

    国密哈希 a. 方法1:

    from pysmx.SM3 import SM3
    sm3 = SM3()
    sm3.update('abc')
    sm3.hexdigest()
    

    b. 方法2:

    from pysmx.SM3 import hash_msg
    s = 'abc'
    hash_msg(s)
    

    c.方法3(推荐方法)

     # 待签名字符串与签名密钥进行拼接,拼接结果使用sm3计算签名值。
        sgin_str = params_str + toke
        sgin_str = sgin_str.replace(" ", "")  # 去除全部空格
        sgin_str = sgin_str.replace("'", '"')  # 去除全部空格
        # 计算sm3
        sgin = hash(sgin_str)
    

    SM4

    国密私钥加解密
    a. 加密
    这是我在实际操作中遇到的,java和python计算出来的结果不一样,于是以下的方法可以使其一致

    from gmssl.sm4 import CryptSM4, SM4_ENCRYPT
    def password_encryption(password_data, key):
        '''
        sm4加密
        '''
        value = bytes(password_data, encoding='utf-8')  # 字符串转bytes类型
        mk = bytes.fromhex(key)  # 字符串转bytes类型
        sm4 = CryptSM4()  # 初始化
        sm4.set_key(mk, SM4_ENCRYPT)  # 密钥及模式
        return bytes.hex(sm4.crypt_ecb(value))  # 返回16进制
    

    b. 解密

    from pysmx.SM4 import Sm4, ENCRYPT, DECRYPT
    key_data = b'hello word errrr...'  # 至少16字节
    sm4 = Sm4()
    sm4.sm4_set_key(key_data, DECRYPT)
    sm4.sm4_crypt_ecb(msg)
    

    相关文章

      网友评论

          本文标题:python实现sm2、sm3、sm4算法计算

          本文链接:https://www.haomeiwen.com/subject/jlkpwltx.html