Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)
Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)
1、openssl生成RSA公私钥对
1.1、生成RSA公私钥对命令
[root@loaclhost ~]# openssl
OpenSSL> genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
..++++++
.....++++++
e is 65537 (0x10001)
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform pem -nocrypt -out rsa_private_key_8.pem
OpenSSL> rsa -in rsa_private_key_8.pem -pubout -out rsa_public_key.pem
1.2、公钥
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfNHu9aoeNUTAZH3GCP2CQaSOg
XNx0tImsIaCWBEQK3/fvUx8f17hIOtttCMrrTPWefUdcUxLIZ+xzqeU/eISsz9Ym
kguImd1+bMkGIYiHBKmF5Uww2jGSU738c+AUuRKpixZP+VPekLY+KbOH7NkE2U/L
XGbDeMXeiqQ22UmOSQIDAQAB
-----END PUBLIC KEY-----
1.3、私钥
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCfNHu9aoeNUTAZH3GCP2CQaSOgXNx0tImsIaCWBEQK3/fvUx8f
17hIOtttCMrrTPWefUdcUxLIZ+xzqeU/eISsz9YmkguImd1+bMkGIYiHBKmF5Uww
2jGSU738c+AUuRKpixZP+VPekLY+KbOH7NkE2U/LXGbDeMXeiqQ22UmOSQIDAQAB
AoGACXx2Fw4+73Oz+vs9pzYhidlJ7yc5V5beUSxbxjSQ3VkFC/SW+S3AZEVlh7Sr
aqPWStBKLT0h9GEE3Mt1xndm6FEVUebboPxDekNU46NnzmF82olzOZbDQuK3LIZT
rKoGMmUD6SlYo9B7DpP3gCYTOb9c6OzHRjcJuHPNWdlyH4UCQQDOrBUupe9vyC4D
iOHIym7dcVj5+O459OzhnXli1WvMhhYpr9QwVC7cRVJk6ZsQgSj+3NmZBx0S0DzC
Ux1fUnOTAkEAxTQZX+M3OrRSIMzUSEI0prZe/B+ZSwXMUpcWu830Zlz0MbhrDSAg
Y67vHE1cAfLIFQOLUWwr+6Fb7hcrhJZYMwJAGB1uL04/XPyvmcv8BHDSdNZH+or4
SRzyEvVL96NNe8TdiymwCZ+ZBCy2i33SkR9xCCP+4+M3mj1gCZCnKbs2LwJBAJ/I
d+reoohZRNY4wKQPqLOPvuSQAdfsycH9k7j1xloOZPnIUEzhQ/0g57LJ54vYmE+W
gJKnj/ehpWgDtAoI+0sCQCXMKPQb2yt2Ca5Ew7R8W2mFo3AyuiYa/FWyeBHZ3x6h
Lqd69roKtGGkB1/rNrPze6/Kqkyjas2urie8cqbzw0A=
-----END RSA PRIVATE KEY-----
IYGlvJCzjUd/9fPFZsxsJEgoCN49ssoqigJxpehNNOMQxEr1z4HdN5BQFypfHQFWCDhs8AZjLIIhnMDMzvI6eilVFEF/HnQowMhdI2xvKnJDD1czwtobdtOc92oJqkV5hiWdaiG3RYS+wY9OrExQGXt/5i1MO3EDaU79GaZf/f60UUTATBW1Sm4jQ4yC65jZeOhZ6UBRlLrCdX/eHhIC5rcqG75d8Xl+2iNW2jtgbXeo5aExz6bG7kwlViS3T4raZvnFZUafZqi5kQEZqAxe1CHxs34XU0riRTuM/k4nDOYIC5IHcXKRNxsDYuKhEBMEcvhh6XgFa/uO2JEeEu3mvg==
2、Python调用RSA加解密
安装:pip install pycryptodome
引用:
from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
2.1、Python代码
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
import base64def rsa_encrypt(public_key_str,plain_data):#pubkey = RSA.import_key(public_key_str)pubkey = RSA.importKey(public_key_str) #读入公钥rsa = PKCS1_cipher.new(pubkey) #生成对象## 通过生成的对象加密明文,注意,在python3中加密的数据必须是bytes类型的数据,不能是str类型的数据cipher_text = base64.b64encode(rsa.encrypt(bytes(plain_data.encode('utf-8'))))cipher_data=cipher_text.decode('utf-8')return cipher_datadef rsa_decrypt(private_key_str, cipher_data):pri_key = RSA.importKey(private_key_str) #导入私钥cipher = PKCS1_cipher.new(pri_key) #生成对象# 将密文解密成明文,返回的是一个bytes类型数据,需要自己转换成strplain = cipher.decrypt(base64.b64decode(cipher_data.encode("utf8")), 0)plain_data = plain.decode('utf-8')return plain_datapublic_key ="-----BEGIN PUBLIC KEY-----\n"+"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfNHu9aoeNUTAZH3GCP2CQaSOgXNx0tImsIaCWBEQK3/fvUx8f17hIOtttCMrrTPWefUdcUxLIZ+xzqeU/eISsz9YmkguImd1+bMkGIYiHBKmF5Uww2jGSU738c+AUuRKpixZP+VPekLY+KbOH7NkE2U/LXGbDeMXeiqQ22UmOSQIDAQAB"+"\n-----END PUBLIC KEY-----\n"
plain_text="Hello World!"
cipher_text =rsa_encrypt(public_key, plain_text)
print(cipher_text)private_key ="-----BEGIN RSA PRIVATE KEY-----\n"+"MIICXAIBAAKBgQCfNHu9aoeNUTAZH3GCP2CQaSOgXNx0tImsIaCWBEQK3/fvUx8f17hIOtttCMrrTPWefUdcUxLIZ+xzqeU/eISsz9YmkguImd1+bMkGIYiHBKmF5Uww2jGSU738c+AUuRKpixZP+VPekLY+KbOH7NkE2U/LXGbDeMXeiqQ22UmOSQIDAQABAoGACXx2Fw4+73Oz+vs9pzYhidlJ7yc5V5beUSxbxjSQ3VkFC/SW+S3AZEVlh7SraqPWStBKLT0h9GEE3Mt1xndm6FEVUebboPxDekNU46NnzmF82olzOZbDQuK3LIZTrKoGMmUD6SlYo9B7DpP3gCYTOb9c6OzHRjcJuHPNWdlyH4UCQQDOrBUupe9vyC4DiOHIym7dcVj5+O459OzhnXli1WvMhhYpr9QwVC7cRVJk6ZsQgSj+3NmZBx0S0DzCUx1fUnOTAkEAxTQZX+M3OrRSIMzUSEI0prZe/B+ZSwXMUpcWu830Zlz0MbhrDSAgY67vHE1cAfLIFQOLUWwr+6Fb7hcrhJZYMwJAGB1uL04/XPyvmcv8BHDSdNZH+or4SRzyEvVL96NNe8TdiymwCZ+ZBCy2i33SkR9xCCP+4+M3mj1gCZCnKbs2LwJBAJ/Id+reoohZRNY4wKQPqLOPvuSQAdfsycH9k7j1xloOZPnIUEzhQ/0g57LJ54vYmE+WgJKnj/ehpWgDtAoI+0sCQCXMKPQb2yt2Ca5Ew7R8W2mFo3AyuiYa/FWyeBHZ3x6hLqd69roKtGGkB1/rNrPze6/Kqkyjas2urie8cqbzw0A="+"\n-----END RSA PRIVATE KEY-----\n"
decrypt_data =rsa_decrypt(private_key,cipher_text)
print(decrypt_data)
2.2、执行结果
"D:\Program Files\Python386\python.exe" D:/python_project/apiTest/venv/src/common/common.py
MNkriQhmq7Y1L4fGQ5zdAuoxpvRJHrBIRjRZDhTebxTVPoJ1UJqIGekZVi36W+lJkd57az9tj3HpRZS2WLd52CvKpnCyv5yhQcxduCPMrekINwz1mUj1ZaNVFiRPdE6aj5P+jVPPZWkd8GNu346PU6pQb4mq49RejfevnN8xT8E=
Hello World!
Process finished with exit code 0
参考:https://blog.csdn.net/qq_62789540/article/details/124400910
相关文章:

Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)
Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对) 1、openssl生成RSA公私钥对 1.1、生成RSA公私钥对命令 [rootloaclhost ~]# openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Generating RSA private key, 1024 bit long modulus .. ...…...
Java学习笔记-day04-NIO核心依赖多路复用小记
NIO允许一个线程同时处理多个连接,而不会因为一个连接的阻塞而导致其他连接被阻塞。核心是依赖操作系统的多路复用机制。 操作系统的多路复用机制 多路复用是一种操作系统的 I/O 处理机制,允许单个进程(或线程)同时监视多个输入…...

Java+springboot+vue智慧校园源码,数据云平台Web端+小程序教师端+小程序家长端
技术架构: Javaspringbootvue element-ui小程序电子班牌:Java Android演示自主版权。 智慧校园电子班牌人脸识别系统全套源码,包含:数据云平台Web端小程序教师端小程序家长端电子班牌 学生端。 电子班牌系统又称之为智慧班牌&am…...

算法日志的存在核心在于搭建自检系统
"相信每一个人执行与日志有关的任务都会遇到这样难题吧?长达几万行的日志,如果我们单纯用肉眼去一个个排查,那么恐怕所耗费的时间是以天为计量单位了。当然这是一种比较夸张的情况,根据我的项目经验,正常情况是十…...
【2023开发组一等奖】定位家乡味——北京市老乡探店寻味系统
作品介绍 1 需求分析 中国人的身上都系着两根线,一条线牵引着我们去远方,一条线牵引着我们归故乡。在当今社会,我们因为各种各样的原因背起行囊远离故乡去往千里之外的远方,而那暗涌在血脉的乡愁总会使我们在看到家乡菜的时候,心底溢出一种不可言说的温暖。那么,当你在异…...

37-数据类型,一元运算符typeof,字符串string,布尔Boolean,未定义undefined,空null,数组Array
<body><script>// 0.1加0.2不等于0.3,正确的运算方法如下console.log(0.10.2);var x 0.1;var y 0.2;console.log((x*10y*10)/10);</script> </body> 简单数据类型(5种):数字number,字符串s…...

zabbix部署
zabbix部署 部署zabbix服务被监测主机部署zabbix-agent2 使用版本 组件版本centos7.9zabbix5.0php7.2.24MariaDB5.5.68 部署zabbix服务 关闭防火墙和selinux [rootnode ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: …...

深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题
为什么要看源码: 1、提升技术功底: 学习源码里的优秀设计思想,比如一些疑难问题的解决思路,还有一些优秀的设计模式,整体提升自己的技术功底 2、深度掌握技术框架: 源码看多了,对于一个新技术…...

寒假前端第一次作业
1、用户注册: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> …...

【LabVIEW FPGA入门】创建第一个LabVIEW FPGA程序
本教程仅以compactRIO(FPGA-RT)举例 1.系统配置 1.1软件安装 FPGA-RT 1. LabVIEW Development System (Full or Professional) 2. LabVIEW Real-Time Module 3. LabVIEW FPGA Module 4. NI-RIO drivers 1.2硬件配置 1.使用线缆连接CompactRIO至主机…...

【STM32】STM32学习笔记-USART串口数据包(28)
00. 目录 文章目录 00. 目录01. 串口简介02. HEX数据包03. 文本数据包04. HEX数据包接收05. 文本数据包接收06. 预留07. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持…...

Java网络爬虫--HttpClient
目录标题 技术介绍有什么优点?怎么在项目中引入? 请求URLEntityUtils 类GET请求带参数的GET请求POST请求 总结 技术介绍 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、功能丰富的、支持 HTTP 协议的客户端编程工具包。相…...

若依项目的table列表中对每一个字段增加排序按钮(单体版和前后端分离版)
一、目标:每一个字段都添加上下箭头用来排序 只需要更改前端代码,不需要更改后端代码,后面会讲解原理 二、单体版实现方式: 1.在options中添加sortable:true 2.在需要排序的字段中添加sortable:true 三、前后端分离版 1.el-table上添加@sort-change=“handleSortChange”…...
Linux自动化部署脚本
1:最近项目部署比较频繁终于熬不住了 就有下面的这东西 #!/bin/sh #报错停止运行 set -e # 获取tomcat的PID TOMCAT_PID$(ps -ef | grep tomcat | grep -v grep | awk {print $2}) # tomcat的启动文件位置 START_TOMCAT/mnt/tomcat/bin/startup.sh # 项目文件部署位置 PROJECT…...
lvgl修改图片大小上限
在lvgl中读取图片文件时,被读取的图片具有上限,也就是2048像素。这会造成两个非预期的结果: 超过2048像素的部分会被裁去。表示图片的结构体lv_img_t中的w和h变量值是图片像素被2048求余。例如,当一个图片高为2048像素时…...

阻止持久性攻击改善网络安全
MITRE ATT&CK框架是一个全球可访问的精选知识数据库,其中包含基于真实世界观察的已知网络攻击技术和策略。持久性是攻击者用来访问系统的众多网络攻击技术之一;在获得初始访问权限后,他们继续在很长一段时间内保持立足点,以窃取数据、修改…...
MFC与Qt多个控件响应统一响应消息处理
就目前使用C开发框架来说,今天来讲述下MFC框架下与Qt框架下,如何让多个控件响应统一消息处理方法。 功能:假设有5个按钮,需要响应同一个处理函数,该如何实现呢? Qt方式 开发环境:win10 VS201…...
Camunda rest api鉴权
对于rest api 不能没有限制的任何人随意调用,需要提供账号信息。 一:工作流引擎增加过滤器 /*** 对/engine-rest/*进行鉴权,防止非法攻击* 客户端调用需要配置用户凭证否则报错401* camunda.bpm.client.basic-auth.username* camunda.bpm.cl…...

【PostgreSQL】在DBeaver中实现序列、函数、视图、触发器设计
【PostgreSQL】在DBeaver中实现序列、函数、触发器、视图设计 基本配置一、序列1.1、序列使用1.1.1、设置字段为主键,数据类型默认整型1.1.2、自定义序列,数据类型自定义 1.2、序列延申1.2.1、理论1.2.2、测试1.2.3、小结 二、函数2.1、SQL直接创建2.1.1…...

PyQt5-小总结
之前学习PyQt5,然后那段时间想做一个桌面小程序,后来由于学习内容较多就做了一小部分,但是可以进行页面跳转。大家如果是初学者对Python感兴趣而且刚学数据库时可以看看代码,可能会有点启发。 效果: 登录进来是这&…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...
比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表
设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

使用VMware克隆功能快速搭建集群
自己搭建的虚拟机,后续不管是学习java还是大数据,都需要集群,java需要分布式的微服务,大数据Hadoop的计算集群,如果从头开始搭建虚拟机会比较费时费力,这里分享一下如何使用克隆功能快速搭建一个集群 先把…...