使用Python的RsaKey()对象进行RSA数字签名的示例代码
发布时间:2023-12-26 06:01:14
下面是使用Python的RsaKey()对象进行RSA数字签名的示例代码:
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()
public_key = key.publickey().export_key()
# 使用私钥进行数字签名
def sign_message(message, private_key):
# 读取私钥
rsa_key = RSA.import_key(private_key)
# 对消息进行哈希
hash_obj = SHA256.new(message.encode('utf-8'))
# 创建数字签名器
signer = pkcs1_15.new(rsa_key)
# 对哈希值进行签名
signature = signer.sign(hash_obj)
return signature
# 使用公钥进行数字签名验证
def verify_signature(message, signature, public_key):
# 读取公钥
rsa_key = RSA.import_key(public_key)
# 对消息进行哈希
hash_obj = SHA256.new(message.encode('utf-8'))
# 创建数字签名验证器
verifier = pkcs1_15.new(rsa_key)
try:
# 验证数字签名
verifier.verify(hash_obj, signature)
print("Signature is valid.")
except (ValueError, TypeError):
print("Signature is invalid.")
# 示例代码
message = "Hello, World!"
signature = sign_message(message, private_key)
print("Message:", message)
print("Signature:", signature)
verify_signature(message, signature, public_key)
这段代码首先使用RSA.generate()函数生成一个2048位的RSA密钥对。然后通过export_key()方法获取私钥和公钥的字节表示。接下来,定义了sign_message()函数和verify_signature()函数用于签名和验证签名。
在示例代码中,我们对字符串"Hello, World!"进行签名,然后使用verify_signature()函数对签名进行验证。输出结果将打印出消息和签名,以及验证结果。
请注意,这只是一个简单的示例,实际应用中,可能需要更复杂的逻辑来保护私钥,并使用更复杂的哈希算法。此外,还需要确保使用安全的通信渠道来传输公钥以进行验证。
