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

使用Python实现ECDSASECP256k1的数字签名和验证示例

发布时间:2023-12-19 02:53:23

ECDSA(Elliptic Curve Digital Signature Algorithm)是一种基于椭圆曲线密码学的数字签名算法。ECP256k1是一种特定的椭圆曲线,被广泛应用于比特币和其他加密货币的签名和验证。

以下是使用Python实现ECDSASECP256k1的数字签名和验证的示例代码:

1. 导入必要的库:

import hashlib
import ecdsa
from ecdsa import SigningKey, VerifyingKey, SECP256k1

2. 生成密钥对:

sk = SigningKey.generate(curve=SECP256k1)  # 生成私钥
vk = sk.verifying_key  # 生成公钥
sk_hex = sk.to_string().hex()  # 将私钥转换为十六进制字符串
vk_hex = vk.to_string().hex()  # 将公钥转换为十六进制字符串

3. 进行签名:

message = b"Hello, World!"  # 待签名的消息
sk = SigningKey.from_string(bytes.fromhex(sk_hex), curve=SECP256k1)  # 将十六进制私钥转换为签名密钥
signature = sk.sign(message)  # 对消息进行签名
signature_hex = signature.hex()  # 将签名结果转换为十六进制字符串

4. 进行验证:

vk = VerifyingKey.from_string(bytes.fromhex(vk_hex), curve=SECP256k1)  # 将十六进制公钥转换为验证密钥
signature = bytes.fromhex(signature_hex)  # 将十六进制签名转换为字节格式
is_valid = vk.verify(signature, message)  # 验证签名是否有效,返回True或False

完整的例子如下所示:

import hashlib
import ecdsa
from ecdsa import SigningKey, VerifyingKey, SECP256k1

sk = SigningKey.generate(curve=SECP256k1)  # 生成私钥
vk = sk.verifying_key  # 生成公钥
sk_hex = sk.to_string().hex()  # 将私钥转换为十六进制字符串
vk_hex = vk.to_string().hex()  # 将公钥转换为十六进制字符串

message = b"Hello, World!"  # 待签名的消息
sk = SigningKey.from_string(bytes.fromhex(sk_hex), curve=SECP256k1)  # 将十六进制私钥转换为签名密钥
signature = sk.sign(message)  # 对消息进行签名
signature_hex = signature.hex()  # 将签名结果转换为十六进制字符串

vk = VerifyingKey.from_string(bytes.fromhex(vk_hex), curve=SECP256k1)  # 将十六进制公钥转换为验证密钥
signature = bytes.fromhex(signature_hex)  # 将十六进制签名转换为字节格式
is_valid = vk.verify(signature, message)  # 验证签名是否有效,返回True或False

print("私钥: " + sk_hex)
print("公钥: " + vk_hex)
print("签名: " + signature_hex)
print("签名验证结果: " + str(is_valid))

以上代码生成了一对公私钥,对消息进行签名,并验证了签名的有效性。通过输出,可以查看这些值。

这是一个简单的实现示例,可以说明ECDSASECP256k1的签名和验证过程。在实际应用中,需要考虑更多的安全性和性能方面的因素,例如使用更安全的随机数生成器和密钥存储等。