python之国密SM4加密、解密与SM2签名、验签

from gmssl import sm2,sm4
import base64

class SM4():
    def __init__(self, key, iv="12345678"):
        self.key = key
        self.iv  = iv

    def  encrypt(self,text):
        """
        加密
        :param text: 需要加密的文本
        :return:
        """
        sm4_encrypt = sm4.CryptSM4()
        sm4_encrypt.set_key(self.key.encode(), sm4.SM4_ENCRYPT)
        data = sm4_encrypt.crypt_ecb(text.encode())
        data = base64.b64encode(data).decode("utf-8")
        return data

    def decrypt(self, text):
        """
        解密
        :param text: 需要解密的文本
        :return:
        """
        sm4_decrypt = sm4.CryptSM4()
        sm4_decrypt.set_key(self.key.encode(),sm4.SM4_DECRYPT)
        data = sm4_decrypt.crypt_ecb(base64.b64decode(text) ).decode()
        return data

    def sm2_sign(self,text,private_key, public_key):
        """SM2数字签名,私钥进行签名,公钥进行验签"""
        signer = sm2.CryptSM2(private_key=private_key, public_key=public_key)
        data = signer.sign_with_sm3(text.encode(), self.iv.encode())
        return data

    def sm2_verify(self, signdata, endata, private_key, public_key):
        """SM2数字签名,私钥进行签名,公钥进行验签"""
        signer = sm2.CryptSM2(private_key=private_key,public_key=public_key)
        data = signer.verify_with_sm3(signdata, endata.encode())
        return data

 

posted @ 2024-06-26 09:44  **绵绵羊**  阅读(17)  评论(0编辑  收藏  举报