Python——Crypto库实现公钥加密私钥解密

本文介绍了RSA非对称加密算法的基本原理,并展示了如何使用Python的Crypto库生成RSA密钥对,以及利用PKCS1_v1_5标准进行数据加密和解密。通过openssl命令行工具生成公钥和私钥,然后在Python中导入并用于加密和解密过程。文章还包含了完整的代码示例,演示了加密和解密的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。
本文主要是Crypto RSA算法加密。

RSA介绍

RSA算法是一种非对称加密算法,即由一个私钥和一个公钥构成的密钥对,通过私钥签名,公钥验签,或者通过公钥加密,私钥解密。其中,公钥可以公开,私钥必须保密。

例:当小明给小红发送信息时,可以用小明自己的私钥签名,小红用小明的公钥验签,也可以用小红的公钥加密,小红用她自己的私钥解密,这就是非对称加密。相比对称加密,非对称加密只需要每个人各自持有自己的私钥,同时公开自己的公钥。

openssl生成公钥和私钥

使用openssl生成公钥和私钥:

首先,在命令行执行以下命令以生成一个RSA密钥对:

openssl genrsa -aes256 -out rsa-key.pem 2048

根据提示输入密码,这个密码是用来加密RSA密钥的,加密方式指定为AES256,生成的RSA的密钥长度是2048位。执行成功后,我们获得了加密的rsa-key.pem文件。

第二步,通过上面的rsa-key.pem加密文件,我们可以导出原始的私钥,命令如下:

openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem

输入第一步的密码,我们就可以获得加密后的私钥。

类似的,我们用下面的命令导出原始的公钥:

openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pem

python实现生成公私钥

首先,需要安装Crypto库:

python3 -m pip install pycryptodome
from Crypto import Random
from Crypto.PublicKey import RSA

# 获取一个伪随机数生成器
random_generator = Random.new().read
# 获取一个rsa算法对应的密钥对生成器实例
rsa = RSA.generate(1024, random_generator)

# 生成私钥并保存
private_pem = rsa.exportKey()
with open('rsa.key', 'wb') as f:
    f.write(private_pem)

# 生成公钥并保存
public_pem = rsa.publickey().exportKey()
with open('rsa.pub', 'wb') as f:
    f.write(public_pem)

PKCS1_v1_5包

RSA PKCS#1 v1.5加密标准主要描述了如何使用RSA公钥密码体系加密、解密数据,以及数字签名的算法

数据加密以及解密

导入相关包

from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

数据加密

message = "This is a plain text."
with open('rsa.pub', 'r') as f:
    public_key = f.read()
    rsa_key_obj = RSA.importKey(public_key)
    cipher_obj = PKCS1_v1_5.new(rsa_key_obj)
    cipher_text = base64.b64encode(cipher_obj.encrypt(message.encode()))
    print('cipher text: ', cipher_text)

数据解密

with open('rsa.key', 'r') as f:
    private_key = f.read()
    rsa_key_obj = RSA.importKey(private_key)
    cipher_obj = PKCS1_v1_5.new(rsa_key_obj)
    random_generator = Random.new().read
    plain_text = cipher_obj.decrypt(base64.b64decode(cipher_text), random_generator)
    print('plain text: ', plain_text.decode())

效果展示

在这里插入图片描述

Python 中的 `cryptography` 提供了一套强大的加密工具,包括 Elliptic Curve Cryptography (ECC) 算法的支持。如果你想要在 Python使用 ECC 加密,可以按照以下步骤: 首先,你需要安装 cryptography ,如果你还没有安装,可以使用 pip 安装: ```bash pip install cryptography ``` 然后,你可以通过以下代码示例来创建并使用 ECC 密钥对,并进行加密解密: ```python from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import serialization # 生成椭圆曲线私钥公钥 private_key = ec.generate_private_key(ec.SECP256R1()) public_key = private_key.public_key() # 将公钥转换为PEM格式(方便分享) public_key_pem = public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) # 使用私钥加密数据 cipher_text = b"Your data to encrypt" plaintext = cipher_text cipher = Cipher(algorithms.ECDH(private_key), modes.ECB(), backend=default_backend()) encryptor = cipher.encryptor() encrypted_data = encryptor.update(plaintext) + encryptor.finalize() # 使用公钥解密数据 decryptor = Cipher(algorithms.ECDH(public_key), modes.ECB(), backend=default_backend()).decryptor() decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize() # 检查解密后的数据是否与原始数据一致 if plaintext == decrypted_data: print("Decryption successful.") else: print("Decryption failed.")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九思梦鹿

喜欢,请记得点赞或赞赏哟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值