使用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数字签名。在实际应用中,还需要考虑更复杂的安全问题,例如密钥管理、密钥长度等。
