使用Python实现ECDSASECP256k1的数字签名和验证
发布时间:2023-12-19 02:52:06
ECDSA(Elliptic Curve Digital Signature Algorithm)是一种基于椭圆曲线的数字签名算法,被广泛应用于密码学和区块链领域。ECP256k1是一种椭圆曲线参数,被用于比特币的数字签名。
Python的ecdsa库提供了对ECDSA签名和验证的支持。首先,需要安装该库:
pip install ecdsa
下面是一个实现ECDSASECP256k1数字签名和验证的示例代码:
import hashlib
from ecdsa import SigningKey, VerifyingKey, SECP256k1
def generate_key_pair():
sk = SigningKey.generate(curve=SECP256k1) # 生成私钥
vk = sk.get_verifying_key() # 从私钥中派生公钥
return sk, vk
def sign_message(sk, message):
signature = sk.sign(message) # 使用私钥对消息进行签名
return signature
def verify_signature(vk, signature, message):
try:
vk.verify(signature, message) # 使用公钥验证签名
return True
except:
return False
# 生成密钥对
sk, vk = generate_key_pair()
# 签名示例消息
message = b"Hello, world!"
signature = sign_message(sk, message)
# 验证签名
is_valid = verify_signature(vk, signature, message)
print(f"Is valid: {is_valid}")
上述代码中,generate_key_pair函数用于生成ECDSA密钥对,返回私钥(sk)和公钥(vk)。使用SigningKey.generate函数生成私钥,并使用get_verifying_key函数从私钥中派生公钥。
sign_message函数使用提供的私钥对指定的消息进行签名,返回签名结果。
verify_signature函数使用提供的公钥验证指定的签名是否有效。vk.verify函数会抛出异常如果签名无效,因此使用try-except语句来判断签名验证的结果。
最后,代码生成了一个密钥对,并使用私钥对消息进行签名。然后,使用公钥验证这个签名是否有效。最后打印签名验证的结果。
请注意,在实际使用中,签名方和验证方需要使用相同的椭圆曲线参数(如ECP256k1),以确保密钥对的兼容性。
希望以上内容对您有所帮助!
