前言
本文介绍使用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}")
Python实现SM2加密、解密、签名与验签
3662

被折叠的 条评论
为什么被折叠?



