利用Crypto.PublicKey.RSA库在Python中实现RSA加密解密和数字签名
发布时间:2024-01-13 14:18:38
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它使用一对密钥,即公钥和私钥,进行加密和解密。RSA也可以用于数字签名,以验证数据的完整性和身份认证。
在Python中,我们可以使用Crypto.PublicKey.RSA库来实现RSA加密、解密和数字签名。下面是一个关于如何使用该库的例子:
# 导入所需库
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
# 生成密钥对
keyPair = RSA.generate(2048)
# 获取公钥和私钥
publicKey = keyPair.publickey()
privateKey = keyPair.export_key()
# 要加密的数据
data = b"Hello, World!"
# 使用公钥进行加密
encryptedData = publicKey.encrypt(data, None)
# 使用私钥进行解密
decryptedData = keyPair.decrypt(encryptedData)
# 打印解密结果
print("解密结果:", decryptedData)
# 创建数字签名
hashObj = SHA256.new(data)
signer = PKCS1_v1_5.new(keyPair)
signature = signer.sign(hashObj)
# 打印数字签名
print("数字签名:", signature)
# 验证数字签名
verifier = PKCS1_v1_5.new(publicKey)
verified = verifier.verify(hashObj, signature)
# 打印验证结果
print("验证结果:", verified)
在上面的例子中,首先我们生成了一个2048位的RSA密钥对,然后分别获取了公钥和私钥。接下来,我们定义了要加密的数据,并使用公钥对其进行加密。然后,使用私钥对加密后的数据进行解密,得到原始数据。
接着,我们创建了一个数字签名,这里使用SHA256哈希摘要算法对数据进行哈希计算。然后,使用私钥对哈希摘要进行签名。签名过程中,使用的是PKCS1_v1_5算法。创建数字签名后,我们打印了该签名。
最后,我们使用公钥对数字签名进行验证,将原始数据的哈希值与签名进行比较。如果验证通过,返回True;否则返回False。在例子中,我们打印了验证结果。
这就是使用Crypto.PublicKey.RSA库在Python中实现RSA加密、解密和数字签名的基本过程。请注意,加密和解密的数据必须是字节类型(例如b"Hello, World!")。数字签名使用的是私钥,验证数字签名使用的是公钥。
