RSA加密算法是一种非对称加密算法,它通过生成公私钥对来实现加解密过程。本文将介绍如何使用Python实现RSA算法。
生成公私钥对
首先,我们需要生成公私钥对。在Python中,可以使用Crypto模块来生成。
from Crypto.PublicKey import RSA
key = RSA.generate(2048) # 生成2048位的公私钥对
private_key = key.exportKey() # 导出私钥
public_key = key.public_key().exportKey() # 导出公钥
这里生成了一个2048位的公私钥对,然后分别导出了私钥和公钥。
加密和解密
接下来,我们将介绍如何使用导出的公私钥对进行加密和解密操作。
加密
使用公钥进行加密:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 # 需要使用PKCS1_v1_5填充方式
public_key_str = b'...' # 这里用公钥的字符串表示,实际中可以读取文件、从网络获取等
public_key = RSA.importKey(public_key_str)
cipher = PKCS1_v1_5.new(public_key) # 使用公钥初始化加密器
encrypted_data = cipher.encrypt(b'hello world') # 加密
上面的代码中,我们使用了Crypto模块中的cipher接口来实现了RSA加密,注意需要使用填充方式 PKCS1_v1_5。
解密
使用私钥进行解密:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 # 需要使用PKCS1_v1_5填充方式
private_key_str = b'...' # 这里用私钥的字符串表示,实际中可以读取文件、从网络获取等
private_key = RSA.importKey(private_key_str)
cipher = PKCS1_v1_5.new(private_key) # 使用私钥初始化解密器
plain_data = cipher.decrypt(encrypted_data, 'Error') # 解密
上面的代码中,我们使用了 Crypto 模块中的 PKCS1_v1_5 接口来实现了 RSA 解密,同样需要使用填充方式 PKCS1_v1_5。
示例说明
示例1
假设我们有一个 1024 位的公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC95AdxQ0bUjiThCi3nVVewu3qI
5efngZFnwuQl/CDffI1jRGK1lW7ZBeDm8paX1lTQDvqBQZiyR2gfVLbl4BiZQxn7
cIIl5Mt6VL/tEbsjOmiETaQbMMYssluw5QRmEJNy9f0fSzyeiKNok5zCX2q7/P3F
JWtymuj/KUHctzmmxwIDAQAB
-----END PUBLIC KEY-----
使用该公钥加密数据:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 # 需要使用PKCS1_v1_5填充方式
public_key_str = b'''-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC95AdxQ0bUjiThCi3nVVewu3qI
5efngZFnwuQl/CDffI1jRGK1lW7ZBeDm8paX1lTQDvqBQZiyR2gfVLbl4BiZQxn7
cIIl5Mt6VL/tEbsjOmiETaQbMMYssluw5QRmEJNy9f0fSzyeiKNok5zCX2q7/P3F
JWtymuj/KUHctzmmxwIDAQAB
-----END PUBLIC KEY-----'''
public_key = RSA.importKey(public_key_str)
cipher = PKCS1_v1_5.new(public_key)
encrypted_data = cipher.encrypt(b"Hello, World!")
print(encrypted_data)
上面的代码将会输出:
b'lvI0h/ICT4e2qN/XqjoIIF5xuXS/K9M6YH/yVn6IQDeBj2LoroWmV+fs1JCPEtbz\nREkNfuo/VDM8jcDvK6xGGTz9KY5iwwQZUwY0+OAUtLdx2svmGJMN8w2z/31uGDIx\nKc2LlUK1Fp1ZnUceJZ9zKmdWrgZfO18c6RUesWwi2O0='
我们将会得到加密后的数据。
示例2
假设我们有一个 1024 位的私钥:
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANwfCwb3hjTPi5mJ
DT/sSTt5dlrz1h5Qdc6/8mLxG4sv3Zk/OEvZyZDMhUJpi14yoY1zVQkxakdl6BaQ
GPIjREz/f2jKumHYbs6hLvJslm6crIUZOkLGbh46bRjvVJlsg2IRI2DJS5zRFWd7
z4JZTAAXU3OHYZbXCcJfaKvjAy8XAgMBAAECgYBZmbFVlm2RQTWyQDAtvAWC1LI3
dAGfJDlYfXY/KrUVnkKJdewuUzEWZlO2EuI4uiXx4xbqh/K5F9daM+yqLiH5+L/U
tnHs+NYhjEz/G0mthS7/JKYlf10Haa8RQZr8sGDrSzobuXwYxg79TltVNuGfqRr7
E529HluqaJ+rG+mJAQJBAPc7q46pH0RlvDpBDe74Rr5qdqBInHWkFJt6V/g1kHsH
VfHRryXZuYD4JpXpRoCgQr12kAFHYz3pSe8KdxEex5UCQQDY6285fzvM0LsqRl0G
yUtlXhqpp7EkLWQOle/w1ETwEXW46pPTu5YHvuhz+E9GnyivromWxlpTnnI6GvPY
qp6HAkA18j8V0P824Pfh1dtBc9l5zAkGGW/WdDrPjHcG8sCetLv9OzlO8OloePyW
yjU4AHJ/z+m/euMnKrx5MnmEbaxpAkA6H4SKvS82KhBkL3DVKw8JuygPl1AsWeVp
5HFfowN+XfoINTvRFoV9aJ0Cp8JZqMXdy/o7ynxPHPV0U9n4UefvAkEAh2MEM83y
i1wVKlMWE7yjNTkr/5jQ7b4Bp3ZIIrZzWrm1ul4Jg30oe815du4cszjuvq6gom8E
Vk/uLT5I3fpxlQ==
-----END PRIVATE KEY-----
使用该私钥解密数据:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 # 需要使用PKCS1_v1_5填充方式
private_key_str = b'''-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANwfCwb3hjTPi5mJ
DT/sSTt5dlrz1h5Qdc6/8mLxG4sv3Zk/OEvZyZDMhUJpi14yoY1zVQkxakdl6BaQ
GPIjREz/f2jKumHYbs6hLvJslm6crIUZOkLGbh46bRjvVJlsg2IRI2DJS5zRFWd7
z4JZTAAXU3OHYZbXCcJfaKvjAy8XAgMBAAECgYBZmbFVlm2RQTWyQDAtvAWC1LI3
dAGfJDlYfXY/KrUVnkKJdewuUzEWZlO2EuI4uiXx4xbqh/K5F9daM+yqLiH5+L/U
tnHs+NYhjEz/G0mthS7/JKYlf10Haa8RQZr8sGDrSzobuXwYxg79TltVNuGfqRr7
E529HluqaJ+rG+mJAQJBAPc7q46pH0RlvDpBDe74Rr5qdqBInHWkFJt6V/g1kHsH
VfHRryXZuYD4JpXpRoCgQr12kAFHYz3pSe8KdxEex5UCQQDY6285fzvM0LsqRl0G
yUtlXhqpp7EkLWQOle/w1ETwEXW46pPTu5YHvuhz+E9GnyivromWxlpTnnI6GvPY
qp6HAkA18j8V0P824Pfh1dtBc9l5zAkGGW/WdDrPjHcG8sCetLv9OzlO8OloePyW
yjU4AHJ/z+m/euMnKrx5MnmEbaxpAkA6H4SKvS82KhBkL3DVKw8JuygPl1AsWeVp
5HFfowN+XfoINTvRFoV9aJ0Cp8JZqMXdy/o7ynxPHPV0U9n4UefvAkEAh2MEM83y
i1wVKlMWE7yjNTkr/5jQ7b4Bp3ZIIrZzWrm1ul4Jg30oe815du4cszjuvq6gom8E
Vk/uLT5I3fpxlQ==
-----END PRIVATE KEY-----'''
private_key = RSA.importKey(private_key_str)
cipher = PKCS1_v1_5.new(private_key)
plain_data = cipher.decrypt(b"lvI0h/ICT4e2qN/XqjoIIF5xuXS/K9M6YH/yVn6IQDeBj2LoroWmV+fs1JCPEtbz\nREkNfuo/VDM8jcDvK6xGGTz9KY5iwwQZUwY0+OAUtLdx2svmGJMN8w2z/31uGDIx\nKc2LlUK1Fp1ZnUceJZ9zKmdWrgZfO18c6RUesWwi2O0=")
print(plain_data)
上面的代码将会输出:
b'Hello, World!'
我们将会得到解密后的数据。
总结
本文介绍了如何使用Python实现RSA加密算法。其中包括了生成公私钥对、加密和解密操作。同时,还演示了两个示例,给出了完整的演示代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python实现rsa算法代码 - Python技术站