Python

您所在的位置:网站首页 加密算法实例 Python

Python

2024-01-09 01:00| 来源: 网络整理| 查看: 265

目录 RSA介绍openssl生成公钥和私钥python实现生成公私钥PKCS1_v1_5包数据加密以及解密导入相关包数据加密数据解密效果展示

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()) 效果展示

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3