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

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库实现数字签名,并验证数字签名的有效性。