欢迎访问宙启技术站
智能推送

使用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),以确保密钥对的兼容性。

希望以上内容对您有所帮助!