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

使用Python生成ECDSA数字签名的示例代码

发布时间:2023-12-17 12:25:08

下面是使用Python生成ECDSA数字签名的示例代码:

import hashlib
from ecdsa import SigningKey, VerifyingKey, util

# 1. 生成密钥对
private_key = SigningKey.generate()  # 生成私钥
public_key = private_key.verifying_key  # 从私钥获取公钥

# 2. 生成消息的摘要
message = "Hello, World!"
message_hash = hashlib.sha256(message.encode()).digest()

# 3. 使用私钥生成数字签名
signature = private_key.sign(message_hash)

# 4. 使用公钥验证数字签名
is_valid = public_key.verify(signature, message_hash)

# 打印签名结果
print("Message:", message)
print("Private Key (hex):", private_key.to_string().hex())
print("Public Key (hex):", public_key.to_string().hex())
print("Signature (hex):", util.bytes_to_hex(signature))
print("Verification:", "Valid" if is_valid else "Invalid")

上述代码中,使用ecdsa库生成了一个ECDSA密钥对。首先,使用SigningKey.generate()生成一个私钥,并通过private_key.verifying_key获取对应的公钥。

然后,我们选择一个消息进行签名。在示例中,我们选择了一个简单的字符串Hello, World!。使用hashlib库对消息进行哈希处理,以生成消息的摘要。

接下来,使用私钥对消息的摘要进行签名,调用private_key.sign(message_hash)方法,得到数字签名。

最后,使用公钥验证数字签名的有效性,通过调用public_key.verify(signature, message_hash)方法,返回一个布尔值来表示验证结果。

输出结果将打印签名相关信息,包括消息、私钥、公钥、签名及验证结果。

这是一个简单的示例,演示了如何使用Python生成ECDSA数字签名。在实际应用中,还需要考虑更复杂的安全问题,例如密钥管理、密钥长度等。