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

使用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()函数对签名进行验证。输出结果将打印出消息和签名,以及验证结果。

请注意,这只是一个简单的示例,实际应用中,可能需要更复杂的逻辑来保护私钥,并使用更复杂的哈希算法。此外,还需要确保使用安全的通信渠道来传输公钥以进行验证。