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

使用Crypto.PublicKey.RSA库在Python中实现RSA数字签名验证

发布时间:2023-12-17 16:52:38

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,常用于数字签名和数据加密。在Python中,我们可以使用Crypto.PublicKey.RSA库来实现RSA数字签名验证。

首先,我们需要生成RSA密钥对,其中包括公钥和私钥。公钥用于对数据进行加密或验证签名,私钥用于对密文进行解密或生成数字签名。以下是一个生成RSA密钥对的例子:

from Crypto.PublicKey import RSA

key = RSA.generate(2048)  # 生成2048位的RSA密钥对
public_key = key.publickey()  # 获取公钥
private_key = key.export_key()  # 获取私钥

生成密钥对后,我们可以使用私钥对数据进行签名,然后使用公钥验证签名的有效性。以下是一个RSA数字签名验证的例子:

from Crypto.PublicKey import RSA
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256

# 假设已经有签名、公钥和待验证的数据
signature = b'...'  # 签名
public_key = b'...'  # 公钥
data = b'...'  # 待验证的数据

# 加载公钥
rsa_public_key = RSA.import_key(public_key)

# 创建用于签名验证的哈希对象
hash_obj = SHA256.new(data)

# 创建签名验证器
signer = pkcs1_15.new(rsa_public_key)

try:
    # 验证签名的有效性
    signer.verify(hash_obj, signature)
    print("签名有效")
except (ValueError, TypeError):
    print("签名无效")

在上述代码中,pkcs1_15模块用于创建签名验证器,SHA256模块用于创建哈希对象。verify()方法用于验证签名的有效性,如果签名有效,则输出“签名有效”,否则输出“签名无效”。

当然,在实际场景中,我们通常是通过私钥对数据进行签名,然后将签名和公钥一起传递给验证方,验证方使用公钥验证签名的有效性。