python 使用已有密钥对,SM2签名及验签
时间: 2023-08-04 12:25:51 浏览: 276
可以使用 cryptography 库来实现 SM2 签名和验签功能。以下是一个简单的示例代码:
```python
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.asymmetric import utils
from cryptography.hazmat.primitives import hashes
# 加载私钥
private_key = ec.derive_private_key(
private_value=bytes.fromhex('...'), # 私钥值,16进制格式
curve=ec.SECP256K1() # 曲线类型,这里使用 SECP256K1
)
# 加载公钥
public_key = private_key.public_key()
# 待签名的数据
data = b'Hello, world!'
# 签名
signature = private_key.sign(
data=data,
signature_algorithm=ec.ECDSA(hashes.SHA256())
)
# 验签
try:
public_key.verify(
signature=signature,
data=data,
signature_algorithm=ec.ECDSA(hashes.SHA256())
)
print('验签成功')
except:
print('验签失败')
```
需要注意的是,这里使用的是 SECP256K1 曲线,如果需要使用 SM2 曲线,需要将 `curve` 参数设置为 `cryptography.hazmat.primitives.asymmetric.ec.SECP256K1()`. 此外,私钥和签名值需要使用 16 进制格式的字符串进行传递。
阅读全文