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

使用Crypto.Signature.PKCS1_v1_5模块对数字签名进行验证的示例

发布时间:2024-01-03 06:59:45

使用Crypto.Signature.PKCS1_v1_5模块对数字签名进行验证可以确保数据的完整性和真实性。以下是一个示例:

首先,需要生成一对公钥和私钥。可以使用Crypto.PublicKey模块中的RSA类来生成密钥对。例如:

from Crypto.PublicKey import RSA

# 生成密钥对
key = RSA.generate(2048)

# 获取私钥
private_key = key.export_key()

# 获取公钥
public_key = key.publickey().export_key()

# 将私钥保存到文件
with open("private.pem", "wb") as f:
    f.write(private_key)

# 将公钥保存到文件
with open("public.pem", "wb") as f:
    f.write(public_key)

接下来,可以使用私钥对数据进行签名。可以使用Crypto.Signature模块中的PKCS1_v1_5类来进行签名操作。例如:

from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256

# 加载私钥
with open("private.pem", "rb") as f:
    private_key = RSA.import_key(f.read())

# 创建签名对象
signer = PKCS1_v1_5.new(private_key)

# 待签名的数据
data = b"Hello, world!"

# 计算数据的哈希值
hash = SHA256.new(data)

# 对哈希值进行签名
signature = signer.sign(hash)

# 将签名保存到文件
with open("signature.bin", "wb") as f:
    f.write(signature)

完成签名后,可以使用公钥对签名进行验证。同样地,可以使用Crypto.Signature模块中的PKCS1_v1_5类来进行验证操作。例如:

from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256

# 加载公钥
with open("public.pem", "rb") as f:
    public_key = RSA.import_key(f.read())

# 创建验证对象
verifier = PKCS1_v1_5.new(public_key)

# 待验证的数据
data = b"Hello, world!"

# 计算数据的哈希值
hash = SHA256.new(data)

# 加载签名
with open("signature.bin", "rb") as f:
    signature = f.read()

# 验证签名
if verifier.verify(hash, signature):
    print("签名有效")
else:
    print("签名无效")

这个示例演示了如何使用Crypto.Signature.PKCS1_v1_5模块对数字签名进行验证。首先,通过Crypto.PublicKey.RSA类生成一对公钥和私钥。然后,使用私钥对数据进行签名,并将签名保存到文件中。最后,使用公钥对签名进行验证,以确保签名的有效性。这样可以确保数据在传输过程中不被篡改,并且可以验证数据的来源。