Python中Crypto.PublicKey.RSA库实现数字签名的示例代码
发布时间:2024-01-13 14:15:46
Crypto.PublicKey.RSA是Python中常用的用于数字签名和加密的库。下面是一个示例代码,演示了如何使用该库实现数字签名:
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
# 生成RSA密钥对
key = RSA.generate(2048)
# 生成数字签名
message = b"Hello, World!"
hash_object = SHA256.new(message)
signer = pkcs1_15.new(key)
signature = signer.sign(hash_object)
# 验证数字签名
verifier = pkcs1_15.new(key.publickey())
try:
verifier.verify(hash_object, signature)
print("Signature is valid.")
except:
print("Signature is invalid.")
在这个示例中,我们首先生成了一个2048位的RSA密钥对。然后,我们选择了SHA256作为哈希算法,使用SHA256哈希算法对消息进行哈希,并使用私钥对哈希值进行签名。签名的结果就是数字签名。
接下来,我们创建了一个验证器,使用公钥来验证数字签名的有效性。验证器使用与签名时相同的哈希算法对消息进行哈希,然后使用公钥来验证数字签名的有效性。
通过比较签名验证的结果,我们可以确定数字签名的有效性。
下面是一个使用该示例代码的实际例子:
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
# 创建RSA密钥对
key = RSA.generate(2048)
# 加载私钥
private_key = key.export_key()
with open("private.pem", "wb") as f:
f.write(private_key)
# 加载公钥
public_key = key.publickey().export_key()
with open("public.pem", "wb") as f:
f.write(public_key)
# 读取私钥
with open("private.pem", "rb") as f:
private_key = RSA.import_key(f.read())
# 读取公钥
with open("public.pem", "rb") as f:
public_key = RSA.import_key(f.read())
# 生成数字签名
message = b"Hello, World!"
hash_object = SHA256.new(message)
signer = pkcs1_15.new(private_key)
signature = signer.sign(hash_object)
# 验证数字签名
verifier = pkcs1_15.new(public_key)
try:
verifier.verify(hash_object, signature)
print("Signature is valid.")
except:
print("Signature is invalid.")
在这个实际例子中,我们首先生成了一个2048位的RSA密钥对,并将私钥和公钥保存到文件中。
然后,我们读取保存的私钥和公钥,并使用它们来进行数字签名和验证。
通过此示例代码,您可以了解如何使用Crypto.PublicKey.RSA库实现数字签名,并验证数字签名的有效性。
