python 实现sm2 加密 解密 签名与验签

该文章已生成可运行项目,

前言

本文介绍使用python 实现sm2 加密 解密 签名与验签。


不废话,直接上代码

import base64
from gmssl import sm2,func

# 0. 导入 SM2 相关的包  pip3 install gmssl

# 1. 密钥对 (公钥用于加密,私钥用于解密)
private_key = 'A9619AD2AD5DFE2676C646E3661FDD8B538FE4AE82FCAFA670ACBF0392AE4DC1'
public_key = '5F92964747A1C1A6500CA9AED0E428C40AB5857E1BC4CD724DC273EFA3FE455F3409AE105ED0DF7E8113AD160210BD0BD9FB98AC5422DDCC9AA586DA340DD425'


print(f"private_key: {private_key}")
print(f"public_key: {public_key}")
# 2. 初始化 SM2 对象(注意:mode=1 SM2 实现 C1C3C2 格式 mode=0 SM2 实现 C1C2C3 格式)
sm2_crypt = sm2.CryptSM2(
    private_key='',
    public_key=public_key,
    mode=1,
    asn1=True
)

# 3. 待加密数据()
plaintext = b"1234567812345678"
print(f"明文: {(plaintext)} ")
print(f"明文Hex: {(plaintext.hex())} ")
print(f"明文长度: {len(plaintext)} 字节")


# 4. 加密
print(f"\n加密")
encrypt_data = sm2_crypt.encrypt(plaintext)
print(f"加密结果Hex: {encrypt_data.hex()}")
print(f"密文长度: {len(encrypt_data)} 字节")


# 5. 解密
print(f"\n解密")
sm2_decrypt = sm2.CryptSM2(
    private_key=private_key,
    public_key='',
    mode=1
)
decrypt_data = sm2_decrypt.decrypt(encrypt_data)
print(f"解密结果: {decrypt_data.decode('utf-8')}")
print(f"解密结果Hex: {decrypt_data.hex()}")
print(f"解密长度: {len(decrypt_data)} 字节")


# 6. 签名和验证(可选)
print(f"\n签名和验证")
sm2_sign_verify = sm2.CryptSM2(
    private_key=private_key,
    public_key=public_key,
    mode=1
)
random_hex_str = func.random_hex(sm2_sign_verify.para_len)
print(f"random_hex_str: {random_hex_str}")
print(f"random_hex_str长度: {len(random_hex_str)} 字节")
sign   = sm2_sign_verify.sign(plaintext, random_hex_str)
verify = sm2_sign_verify.verify(sign, plaintext)
print(f"签名验证结果: {verify}")


本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值