目录

  • 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().readplain_text = cipher_obj.decrypt(base64.b64decode(cipher_text), random_generator)print('plain text: ', plain_text.decode())

效果展示

Python——Crypto库实现公钥加密私钥解密相关推荐

  1. python加密解密库openssl_OpenSSL和Python实现RSA Key公钥加密私钥解密

    基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基于OpenSSL和Python进行非对称加解密的例子. 1. ...

  2. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  3. C#实现RSA公钥加密私钥解密、私钥加密公钥解密以及Pcks12、X509证书加解密、签名验签

    RSA的私钥签名公钥验签可以见 http://blog.csdn.net/starfd/article/details/51917916,所以这里就没提供对应代码,具体代码如下: using Org. ...

  4. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  5. ASP VBSCRIPT VBA RSA 公钥加密 私钥解密 私钥签名 公钥验签

    <% '@title: Class_Crypt_Rsa '@author: ekede.com '@date: 2020-10-28 '@description: RSA 公钥加密->私钥 ...

  6. asp版 vbscript RSA公钥加密 / 私钥解密 / 私钥签名 / 公钥验签(支持中文)分段加密解密

    最近有空在把自己的asp站点后端函数全部整理了下,在弄RSA的时候遇到了坑了,然后找到下面这位兄弟刚好发布的文章: https://blog.csdn.net/todaygods/article/de ...

  7. 公钥加密私钥解密私钥加密公钥解密

    公钥加密体制 1.公钥加密体制用于保密性时,就是公钥加密,私钥解密. 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密,但是只有持有私钥的人才能正确解密.这样就保证了信息的保密性,因为只 ...

  8. python rsa库_python RSA加密解密

    RSA加密(pip install pycryptodome) 总结: Pycrypto提供了比较完善的加密算法.RSA广泛用于加密与解密,还有数字签名通信领域.使用Publick/Private秘钥 ...

  9. php ms2,php-python2-python3跨语言rsa公钥加密私钥解密

    首先介绍背景:有一php项目,只提供了php加解密接口,因业务需求,需要提供python版本加密接口. 注意: 1.加密方式:使用Crypto包,RSA/1024bit KEY,实例加密使用公钥加密, ...

最新文章

  1. 娃哈哈信息部李钒助阵FBS2017 共探食品饮料信息化之路
  2. Iterator迭代器并发修改异常问题解决
  3. VS Code设置代码片段(C++)
  4. Node出错导致运行崩溃的解决方案
  5. [改善Java代码]不推荐使用binarySearch对列表进行检索
  6. SQL Server实例的十大安全注意事项
  7. 我们为什么要学习 Python、TypeScript 与 Go?
  8. Guava RateLimiter 实现 API 限流,这才是正确的姿势!
  9. 山西计算机职业学校排名2015,2015山西专科学校排名及排行榜
  10. 【瑕疵检测】基于matlab GUI OTSU织物疵点检测【含Matlab源码 860期】
  11. 基于嵌入式linux的流媒体传输系统
  12. Windows下SQLMAP的安装图解
  13. 深入理解JVM虚拟机读书笔记——类的加载机制
  14. 大二 数据结构 期末复习题(仅供参考)
  15. termux python教程_Termux 入门教程:架设手机 Server 下载文件
  16. 腾讯云服务器到期续费流程
  17. 获取华为云课程内嵌的课件pdf文件
  18. Windows系统服务器如何架设网站
  19. 企企通SRM:由“制造”到“智造”,高科技电子行业如何打造智慧供应链?
  20. Windows Live Writer插件:在WLW中插入语法高亮代码(二)

热门文章

  1. 在eclipse中配置Tomcat详细配置
  2. js 获取上个月年月
  3. 智能时代,电话销售如何打造高效的智能化解决方案?
  4. codeforces1271D 2100分贪心
  5. java区块链技术web3j_web3j介绍及基本使用
  6. 如何将大数据变成企业的洞察力和行动力?
  7. qq机器人账号不能发送群消息,被风控
  8. 考证大约报名考试时间:软考/教师资格证/会计/二建
  9. Github Student Developer Pack申请流程【不在学校的认证方法】
  10. 深入了解LS1028A的ENETC、TSN交换机的特性