sm2签名和验签代码 python
时间: 2025-05-29 11:10:22 浏览: 16
### Python 实现 SM2 签名与验签
以下是基于 Python 的 SM2 签名和验签的代码示例。该实现依赖于 `gmssl` 库,这是一个支持国密标准(包括 SM2 和 SM4)的开源库。
#### 安装 gmssl 库
在运行代码之前,请先通过 pip 安装所需的库:
```bash
pip install gmssl
```
#### 示例代码
以下是一个完整的 Python 代码示例,展示如何使用 `gmssl` 进行 SM2 签名和验签:
```python
from gmssl import sm2, func
# 初始化SM2加密实例
public_key = "0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"
private_key = "C9CAFAD54B3ECCACEAE54BFEA5EAEBDFADE8BAA53333BEE1B33BECDD3FDAB4B3"
sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key)
# 待签名的数据
data = b"Hello, this is a test message!"
# 对数据进行哈希处理
hash_data = func.bytes_to_list(func.hash_sm3(data))
# 签名过程
signature = sm2_crypt.sign(hash_data)
print(f"Signature: {func.list_to_bytes(signature).hex()}")
# 验签过程
verify_result = sm2_crypt.verify(sign=signature, data_hash=hash_data)
if verify_result:
print("Verification succeeded!")
else:
print("Verification failed!")
```
#### 关键点解析
1. **公钥与私钥**
上述代码中的 `public_key` 和 `private_key` 是随机生成的一对 SM2 密钥[^1]。实际应用中应确保这些密钥的安全存储。
2. **数据哈希化**
在执行签名前,通常需要对待签名数据进行哈希处理。这里使用的是国密标准的 SM3 哈希算法[^4]。
3. **签名与验签逻辑**
- 签名阶段调用了 `CryptSM2` 类的 `sign` 方法,并传入经过哈希化的消息摘要。
- 验签阶段则通过 `verify` 方法校验签名的有效性,最终返回布尔值表示结果。
---
### 注意事项
- 如果输入数据未经过预处理,则需满足固定长度要求(如 32 字节)。这取决于具体应用场景的需求。
- 在生产环境中,建议采用更安全的方式管理密钥,例如硬件安全模块(HSM)或专用密钥管理系统[^3]。
---
#### 输出样例
假设上述代码正常运行,可能得到如下输出:
```
Signature: ffaa...bbee
Verification succeeded!
```
阅读全文
相关推荐














