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、密码学介绍 密码学(Cryptography)是研究信息的保密性、完整性和验证性的科学和实践。它涉及到加密算法、解密算法、密钥管理、数字签名、身份验证等内容。 密码学中的主要概念包括: 1. 加密算法:加密算法用于将…...
【C++】速识模板(template<class T>)
一、引言 在我们学习C时,常会用到函数重载。而函数重载,通常会需要我们编写较为重复的代码,这就显得臃肿,且效率低下。 重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就…...
腾讯云10万日活服务器配置怎么选?费用多少?
日活10万的小程序或APP使用腾讯云服务器配置怎么选?腾讯云10万人服务器配置多少钱一年?可以选择腾讯云4核8G12M轻量应用服务器或8核16G18M服务器,云服务器CVM的话可以选择标准型S5实例,腾讯云服务器网来详细说下腾讯云日活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,你可以从中删除一些数,使得删完以后的序列中,所有相邻元素之和均为偶数。请问最少需要删除多少个数? 输入格式 第一行…...
Java try-with-resources 显性 与 隐性 关闭 资源
try-with-resources 是 Java 7 引入的一个语言特性,用于简化资源管理的代码,特别是在处理需要关闭的资源(如文件、网络连接、数据库连接等)时。try-with-resources 允许您在 try 语句中声明需要关闭的资源,这些资源会在…...

Vue在页面输出JSON对象,测试接口可复制使用
效果图: 数据处理前: 数据处理后: 代码实现: HTML: <el-table height"600" :data"tableData" border style"width: 100%" tooltip-effect"dark" size"mini"><el-…...
【STM32】FreeRTOS开启后,不再进入主函数的while(1)
开启freertos后,想在主函数的while(1)中实现led的翻转,发现无法实现。 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("输入的内容") (输入文字) 2、clear() (清除元素内的内容) 3、click()(点击元素) 4、quit()关闭浏览器 5、refresh()(刷新浏览器页面) 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,value实现的,这里的数据结构指的是value有不同的类型。 当前版本Redis支持10种数据类型,下面介绍常用的五种数据类型 底层编码 Redis在实现上述数据结构时,会在源码有特定的…...

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

Java泛型集合简明教程
前言 我们编写一个数组并对数组进行排序,不管是对浮点型数组、整型数组、字符串数组或者是其他任何类型的数组进行排序,我们可以利用方法重载的方式,针对每种类型的数组分别编写一个排序方法,需要为几种类型的数组排序࿰…...
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的数据,并且实时的存储到iceberg中。好处是可以一边存数据,一边查询数据。当然使用clickhouse也可以实现数据的既存既取。而hive数据既存既读则会有问题。iceberg中数据读写数据都是从快照中开始的,读和写对…...
文章二:分支管理策略 - 分支玩转:Git分支管理实战
开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun 概述 在软件开发中,版本控制是一项至关重要的工作。Git作为目前最受欢迎的分布式版本控制系统&…...
JS dom元素和鼠标位置之间的一系列属性快速参考
clientHeight 获取对象的高度,不计算任何边距、边框、滚动条,但包括该对象的补白。 clientLeft 获取 offsetLeft 属性和客户区域的实际左边之间的距离。 clientTop 获取 offsetTop 属性和客户区域的实际顶端之间的距离。 clie…...
【剑指 Offer 39】数组中超过一半的数字
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 思考: 方法一:投…...
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…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...