当前位置: 首页 > news >正文

python模块 — 加解密模块rsa,cryptography

一、密码学

1、密码学介绍

密码学(Cryptography)是研究信息的保密性、完整性和验证性的科学和实践。它涉及到加密算法、解密算法、密钥管理、数字签名、身份验证等内容。

密码学中的主要概念包括:

1. 加密算法:加密算法用于将明文转换为密文,从而隐藏敏感信息并保护其机密性。常见的加密算法分为对称加密算法和公钥加密算法。

2. 解密算法:解密算法用于将密文恢复为明文,还原已加密的信息。

3. 密钥:密钥是用于加密和解密过程的关键参数。对称加密算法使用相同的密钥进行加密和解密,而公钥加密算法使用一对相关的密钥:公钥用于加密,私钥用于解密。

4. 公钥(Public Key):公钥是用于加密的密钥,可以公开给任何人使用。它用于将消息加密,只有对应的私钥可以解密。

5. 私钥(Private Key):私钥是用于解密的密钥,应保密。只有私钥与公钥配对的密钥才能解密由公钥加密的消息。

6. 数字签名:数字签名用于验证文档的完整性、真实性和签署者的身份。它结合了公钥加密算法和散列函数,确保签名的可靠性。

密码学在网络通信、电子支付、云计算、电子商务等领域有广泛的应用。它不仅在保护个人隐私和商业机密方面起着重要作用,也在保障国家安全和信息系统的安全性方面发挥重要的角色。

2、加密算法和数字签名

密码学中的加密算法和数字签名是两个主要的概念和技术。

1. 加密算法:
加密算法是用来将明文转换为密文的方法。它使用密钥来进行加密和解密操作。密码学中常见的加密算法包括对称加密算法和公钥加密算法。

- 对称加密算法:对称加密算法使用同一个密钥进行加密和解密操作。常见的对称加密算法包括DES、3DES、AES和Blowfish等。对称加密算法具有高效性能和加密速度快的特点,适合于大数据量的加密和解密操作。

- 公钥加密算法:公钥加密算法使用一对密钥,包括公钥和私钥,进行加密和解密操作。公钥用于加密,私钥用于解密。这种算法常用于安全通信、数字签名和密钥交换等领域。RSA和ECC是常见的公钥加密算法。

2. 数字签名:
数字签名用于验证文档的真实性、完整性和签署者的身份。它结合了公钥加密算法和散列函数的概念。数字签名的生成和验证过程如下:

- 生成数字签名:签名者使用自己的私钥对文档进行散列,然后用私钥对散列值进行加密,生成数字签名。这样,数字签名就包含了文档的摘要以及签署者的身份。

- 验证数字签名:验证者使用签名者的公钥对数字签名进行解密,得到文档的摘要。然后,验证者对原始文档进行散列,将得到的摘要与解密后的摘要进行比较。如果两个摘要一致,则说明数字签名是有效的。

数字签名提供了验证文档完整性和签署者身份的方法,可以防止伪造和篡改。它在电子合同、电子支付和身份验证等领域有广泛的应用。

3、RSA加密算法

RSA(Rivest-Shamir-Adleman)算法是一种公钥加密算法,也是最著名和广泛应用的公钥加密算法之一。它由Ron Rivest、Adi Shamir和Leonard Adleman三位密码学家于1977年提出。

RSA算法的基本原理是利用大素数因子分解问题,它使用一对相关的密钥:公钥和私钥。

RSA算法的加密过程如下:
1. 首先,选择两个不相等的大素数p和q,并计算它们的乘积n=p*q。
2. 计算与n互质的正整数e,作为加密密钥的一部分,称为公钥(n, e)。
3. 计算e的模反元素d,使得(e * d) mod ((p-1) * (q-1)) = 1,作为解密密钥的一部分,称为私钥(n, d)。
4. 加密时,将消息M转换为整数m,满足0 <= m < n。
5. 加密运算:密文C = m^e mod n,其中^表示幂运算,mod表示求余运算。
6. 将密文C发送给接收方。

解密过程如下:
1. 接收到密文C后,用私钥(n, d)进行解密运算:明文M = C^d mod n。
2. 将解密得到的明文M转换为原始消息。

RSA算法的安全性依赖于大整数因子分解问题的困难性,即将一个大整数分解为其素数因子的困难性。如果一个人能够快速有效地解决大整数的因子分解问题,那么整个RSA加密系统就会被破解。

RSA算法在数据加密、数字签名、密钥协商和安全通信等方面广泛应用,是公钥加密领域的重要算法之一。

4、秘钥的格式

秘钥的格式是指秘钥在内存中的表示方式。常见的秘钥格式有:

1. 对称秘钥(Symmetric Key):对称秘钥是一种加密算法中使用的秘钥类型,用于加密和解密数据。对称秘钥的格式通常是一个固定长度的字节序列,可以是任意二进制数据。常见的对称加密算法有AES、DES和3DES等。对称秘钥的长度通常为128位、192位或256位。

2. 非对称秘钥(Asymmetric Key):非对称秘钥是一种加密算法中使用的秘钥类型,包括公钥和私钥。非对称秘钥采用公钥加密、私钥解密的方式,或者使用私钥签名、公钥验证的方式进行加密和解密操作。常见的非对称加密算法有RSA、ECC和DSA等。非对称秘钥的格式通常是使用标准化的表示方式,如PKCS#8、PEM和DER等。

在实际应用中,对称秘钥通常用于数据的加密和解密,而非对称秘钥通常用于密钥的交换、数字签名和证书等操作。

5、秘钥的保存文件格式

常见的保存秘钥的文件格式有:

1. PEM格式(Privacy Enhanced Mail):PEM格式是一种基于文本的格式,通常使用扩展名为.pem。在PEM格式中,密钥以Base64编码的形式存储,并使用特定的头部和尾部标记来标识密钥类型。例如,公钥以"-----BEGIN PUBLIC KEY-----"开始,以"-----END PUBLIC KEY-----"结束,私钥以"-----BEGIN PRIVATE KEY-----"开始,以"-----END PRIVATE KEY-----"结束。PEM格式的密钥可以直接在文本文件中存储,并且易于读取和传输。

2. DER格式(Distinguished Encoding Rules):DER格式是一种二进制格式,通常使用扩展名为.der。在DER格式中,密钥以ASN.1(Abstract Syntax Notation One)结构编码。DER格式的密钥相对于PEM格式更紧凑,适用于网络传输和存储。DER格式的密钥无法直接在文本文件中阅读,因为它是以二进制形式存储的。

无论哪种格式,RSA公钥和私钥都包含了与算法相关的参数。公钥包括模数(n)和指数(e),私钥包括模数(n)和私钥指数(d)。

在Python中,通常可以使用相应的RSA库(如`rsa`库或`cryptography`库)来生成、加载和处理RSA密钥。

6、PKCS#1和PKCS#8

1. PKCS#1格式(Public-Key Cryptography Standards #1):  

公钥以 `-----BEGIN RSA PUBLIC KEY-----` 开头,以 `-----END RSA PUBLIC KEY-----` 结尾。  

私钥以 `-----BEGIN RSA PRIVATE KEY-----` 开头,以 `-----END RSA PRIVATE KEY-----` 结尾。  

2. PKCS#8格式(Public-Key Cryptography Standards #8):  

公钥以 `-----BEGIN PUBLIC KEY-----` 开头,以 `-----END PUBLIC KEY-----` 结尾。  

私钥以 `-----BEGIN PRIVATE KEY-----` 开头,以 `-----END PRIVATE KEY-----` 结尾。  

3. PKCS#8格式相对于PKCS#1格式具有以下优势:

-. 算法的灵活性:PKCS#8格式支持多种非对称算法的私钥,如RSA、DSA、ECC等,而PKCS#1格式仅适用于RSA算法。这使得PKCS#8格式更加通用和灵活,可以适应不同算法的私钥存储和传输需求。

-. 强化私钥安全性:PKCS#8格式提供了私钥的加密功能,可以使用密码对私钥进行加密保护,增强了私钥的安全性。这种加密功能在PKCS#1格式中是不可用的。

-. 容易实现和交互:PKCS#8格式的结构定义相对简单,易于实现和理解。它也更容易与各种编程语言和安全库进行交互,因此在实际应用中更为广泛。

-. 与PKCS#5和PKCS#12的兼容性:PKCS#8格式和PKCS#5、PKCS#12格式具有一定的兼容性,因为它们都基于ASN.1编码规范。这方便了PKCS#8格式和其他PKCS标准之间的转换和集成。

总之,PKCS#8格式相对于PKCS#1格式具有更大的灵活性、私钥安全性加强、易实现和易交互等优势,使得它成为更常用和推荐的非对称密钥格式。

二、rsa模块

三、cryptography模块


reference:

RSA密钥详解 - 知乎

rsa · PyPI

cryptography · PyPI

相关文章:

python模块 — 加解密模块rsa,cryptography

一、密码学 1、密码学介绍 密码学&#xff08;Cryptography&#xff09;是研究信息的保密性、完整性和验证性的科学和实践。它涉及到加密算法、解密算法、密钥管理、数字签名、身份验证等内容。 密码学中的主要概念包括&#xff1a; 1. 加密算法&#xff1a;加密算法用于将…...

【C++】速识模板(template<class T>)

一、引言 在我们学习C时&#xff0c;常会用到函数重载。而函数重载&#xff0c;通常会需要我们编写较为重复的代码&#xff0c;这就显得臃肿&#xff0c;且效率低下。 重载的函数仅仅只是类型不同&#xff0c;代码的复用率比较低&#xff0c;只要有新类型出现时&#xff0c;就…...

腾讯云10万日活服务器配置怎么选?费用多少?

日活10万的小程序或APP使用腾讯云服务器配置怎么选&#xff1f;腾讯云10万人服务器配置多少钱一年&#xff1f;可以选择腾讯云4核8G12M轻量应用服务器或8核16G18M服务器&#xff0c;云服务器CVM的话可以选择标准型S5实例&#xff0c;腾讯云服务器网来详细说下腾讯云日活10万服务…...

vue 使用vue-video-player加载视频(铺满容器)

vue 使用vue-video-player加载视频(铺满容器) 安装 npm install vue-video-player --savemain.js 引入 import VideoPlayer from "vue-video-player" import "video.js/dist/video-js.css" import "vue-video-player/src/custom-theme.css" i…...

OpenCV(三)——图像分割(三)

目录 6.区域生长算法 6.1 区域生长概要 6.2 区域生长原理 7.分水岭算法 7.1 分水岭算法概要...

数论复习c++

改造序列 题目描述 给定长度为 n n n的序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1​,a2​,...,an​&#xff0c;你可以从中删除一些数&#xff0c;使得删完以后的序列中&#xff0c;所有相邻元素之和均为偶数。请问最少需要删除多少个数&#xff1f; 输入格式 第一行…...

Java try-with-resources 显性 与 隐性 关闭 资源

try-with-resources 是 Java 7 引入的一个语言特性&#xff0c;用于简化资源管理的代码&#xff0c;特别是在处理需要关闭的资源&#xff08;如文件、网络连接、数据库连接等&#xff09;时。try-with-resources 允许您在 try 语句中声明需要关闭的资源&#xff0c;这些资源会在…...

Vue在页面输出JSON对象,测试接口可复制使用

效果图&#xff1a; 数据处理前&#xff1a; 数据处理后&#xff1a; 代码实现&#xff1a; HTML: <el-table height"600" :data"tableData" border style"width: 100%" tooltip-effect"dark" size"mini"><el-…...

【STM32】FreeRTOS开启后,不再进入主函数的while(1)

开启freertos后&#xff0c;想在主函数的while(1)中实现led的翻转&#xff0c;发现无法实现。 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, …...

Python+Selenium+Unittest 之selenium11--WebDriver操作方法1-常用操作

目录 1、send_keys("输入的内容") &#xff08;输入文字&#xff09; 2、clear() (清除元素内的内容) 3、click()&#xff08;点击元素&#xff09; 4、quit()关闭浏览器 5、refresh()&#xff08;刷新浏览器页面&#xff09; 6、set_window_size()和用 maxim…...

气液固三相线识别—Langmuir部分复现

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material...

Redis——常见数据结构与单线程模型

Redis中的数据结构 Redis中所有的数据都是基于key&#xff0c;value实现的&#xff0c;这里的数据结构指的是value有不同的类型。 当前版本Redis支持10种数据类型&#xff0c;下面介绍常用的五种数据类型 底层编码 Redis在实现上述数据结构时&#xff0c;会在源码有特定的…...

大数据-玩转数据-Flink-Transform

一、Transform 转换算子可以把一个或多个DataStream转成一个新的DataStream.程序可以把多个复杂的转换组合成复杂的数据流拓扑. 二、基本转换算子 2.1、map&#xff08;映射&#xff09; 将数据流中的数据进行转换, 形成新的数据流&#xff0c;消费一个元素并产出一个元素…...

Java泛型集合简明教程

前言 我们编写一个数组并对数组进行排序&#xff0c;不管是对浮点型数组、整型数组、字符串数组或者是其他任何类型的数组进行排序&#xff0c;我们可以利用方法重载的方式&#xff0c;针对每种类型的数组分别编写一个排序方法&#xff0c;需要为几种类型的数组排序&#xff0…...

Prometheus-RabbitMQ Exporter

文章目录 一、介绍监控插件两个插件的区别一、 官方插件 rabbitmq_prometheus1 配置 RabbitMQ 集群名称2 授权使用插件2.1 配置文件方式2.2 命令行方式3 监听地址和端口4 RabbitMQ 插件获取指标的频率5 配置到 Prometheus6 关于聚合指标和每个对象指标6.1 获取聚合指标 `/metri…...

flink读取kafka数据存储iceberg

1、说明 使用flink实时的读取kafka的数据&#xff0c;并且实时的存储到iceberg中。好处是可以一边存数据&#xff0c;一边查询数据。当然使用clickhouse也可以实现数据的既存既取。而hive数据既存既读则会有问题。iceberg中数据读写数据都是从快照中开始的&#xff0c;读和写对…...

文章二:分支管理策略 - 分支玩转:Git分支管理实战

开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun 概述 在软件开发中&#xff0c;版本控制是一项至关重要的工作。Git作为目前最受欢迎的分布式版本控制系统&…...

JS dom元素和鼠标位置之间的一系列属性快速参考

clientHeight 获取对象的高度&#xff0c;不计算任何边距、边框、滚动条&#xff0c;但包括该对象的补白。 clientLeft 获取 offsetLeft 属性和客户区域的实际左边之间的距离。 clientTop 获取 offsetTop 属性和客户区域的实际顶端之间的距离。 clie…...

【剑指 Offer 39】数组中超过一半的数字

题目&#xff1a; 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例&#xff1a; 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 思考&#xff1a; 方法一&#xff1a;投…...

list.stream.filter,List<List>转换为List

1.filter过滤 返回符合查询条件的集合//过滤所有deviceType为1的List<DeviceWorkTimeEntity> list entities.stream().filter(a -> "1".equals(a.getDeviceType())).toList(); 2.List<List>转换为List 可以使用流(Stream)的flatMap操作 public cl…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...