赞
踩
Crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。
本文主要是Crypto RSA算法加密。
RSA算法是一种非对称加密算法,即由一个私钥和一个公钥构成的密钥对,通过私钥签名,公钥验签,或者通过公钥加密,私钥解密。其中,公钥可以公开,私钥必须保密。
例:当小明给小红发送信息时,可以用小明自己的私钥签名,小红用小明的公钥验签,也可以用小红的公钥加密,小红用她自己的私钥解密,这就是非对称加密。相比对称加密,非对称加密只需要每个人各自持有自己的私钥,同时公开自己的公钥。
使用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
首先,需要安装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)
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())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。