美文网首页
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