当前位置:   article > 正文

Python——Crypto库实现公钥加密私钥解密_使用python模块,使用openssl.crypto模块进行密钥管理。编写一个进行rsa加解密的程

使用python模块,使用openssl.crypto模块进行密钥管理。编写一个进行rsa加解密的程

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

RSA介绍

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

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

openssl生成公钥和私钥

使用openssl生成公钥和私钥:

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

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

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

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

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

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

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

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

python实现生成公私钥

首先,需要安装Crypto库:

python3 -m pip install pycryptodome
  • 1
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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
  • 1
  • 2
  • 3
  • 4

数据加密

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数据解密

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())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

效果展示

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/582002
推荐阅读
相关标签
  

闽ICP备14008679号