RSA理解版本2

news2024/11/25 10:54:08

RSA原理理解

起源:

RSA是一种公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏的首字母组成的。

简介:

RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到了一种快速因数分解的算法,那么用RSA加密的信息的可靠性就会极度下降。但找到这样算法的可能性是非常小的。今天只有短的RSA钥匙才可能被暴力方式破解。到目前为止(2021年),世界上还没有任何可靠的攻击RSA算法的方式。只要其密钥的长度足够长,用RSA加密的信息实际上是不可能被破解的。

加密过程

加密由公钥,私钥,明文,密文,四部分组成。

0b324b7167bc22d72d748dbd2b553c3

前提:公钥(7,33)和私钥(3,33)中的,7,33(这两个33是同一个数字)只有私钥中的3是不公开的。

过程1:现在假设我们用这个公私钥对去发送消息C A O,假如字符转换为的十进制数字的规则就是序号顺序,那么C A O 对应的就是3 1 15

过程2:这时候就用到了公钥中的第一个数字7,也就是对3进行7次方,1进行7次方,15进行7次方,结果分别是2187 1 170859375

过程3:使用公钥的第二个数字33,对上面数字进行求余。2187%33=9 1%33=1 170859375%33=27 最后得到的9 1 27就是密文

将得到的密文发送给接收方,接收方再进行解密

解密过程

1.由发送方可以得到9 1 27,依次对其进行3次方,这里的3次方的3就是私钥中的3.分别得到 729 1 19683

2.再对上面求得数字进行求余 729%33=3 1%33=1 19683%33=15 这里的33就是公钥和私钥公开的数字

3.上一步求解得到的3 1 15是不是很眼熟,没错就是要发送的信息,也就是明文

那么可以用公钥加密,私钥解密,那也可以用私钥解密,公钥加密

总结

如果用E代表7 ,N代表33 D代表3,那么

公钥:(E,N)私钥:(D,N)

得到密文(也就是加密)的公式: 密文=明文的E次方%N

解出明文的公式: 明文=密文的D次方%N

那么公钥和私钥该如何确定?

971580dece8f8f1c18371e223faa740

五个步骤: 1.任意选择两个质数 2.两个质数相乘 3.计算欧拉函数 4.选公钥e的时候,要求不是t的因子还必须是大于1小于T,那么就是gcd(e,T)=1(即是e和T的最大公因数是1)

5.计算私钥d--逆元

逆元---逆元是什么?为什么突然讨论逆元?

还记得上面求解私钥指数d的公式吗?

e*d mod T=1

这个公式也可以写成

e*d ≡ 1(mod T)

定义:如果一个线性同余方程 ax ≡ 1(mod b),则 x 称为 a mod b 的逆元,记作a-1 (a的-1次方)。一个数有逆元的充分必要条件是gcd(a,b)=1,此是逆元唯一存在 。

此处为什么讨论逆元呢?其一,RSA中有逆元的概念;其二,中国剩余定理(CRT)可与 RSA 算法结合来进行加解密,CRT又逃不开逆元的概念,所以就说了。逆元也是数论中一个十分重要的概念,当我们要求 (a / b) mod p的值,且a很大,大到会溢出;或者说b很大,达到会爆精度。无法直接求得a/b的值时,我们就要用到乘法逆元。

所以上述求解私钥指数d,可以说 e 的逆元是 d mod T

计算方法 inverse--- gmpy2.invert

注意求d在python中可以使用求逆函数inverse

#给出p和q,e的数值.引用求逆函数inverse
from Crypto.Util.number import inverse
p=473398607161
q=4511491
e=17
#计算欧拉函数T
t=(p-1)*(q-1)
#计算d
d=inverse(e,t)
print(d)

这个库实在python3.12下执行的,其他版本的可能需要将下载的Crypto的包改为大写

image-20240423145314064

#给出p和q,e的数值.引用求逆函数gmpy2
import gmpy2
p=473398607161
q=4511491
e=17
\#计算欧拉函数T
t=(p-1)*(q-1)
\#计算d
d=gmpy2.invert(e,t)
print(d)

使用gmpy2这个库的时候,我们使用的是3.10的python,其他版本可能会报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JWK和JWT 学习

JWK和JWT 介绍 JWK (JSON Web Key) 和 JWT (JSON Web Token) 是现代Web应用程序中用于安全通信的两个重要概念。它们都是基于JSON的,并且是OAuth 2.0和OpenID Connect等协议的核心组成部分。 官方文档 JWT官方网站 JWK和JWK Set的RFC文档 JWT的RFC文档 JWK (JS…

linux内核网络源码--通知链

内核的很多子系统之间有很强的依赖性,其中一个子系统侦测到或者产生的事件,其他子系统可能都有兴趣,为了实现这种交互需求,linux使用了所谓的通知链。 本章我们将看到 通知链如何声明以及网络代码定义了哪些链 内核子系统如何向通…

Qt | QLCDNumber 类(LCD 数字),LCD 表示液晶显示屏

01、上节回顾 Qt 基础教程合集02、QLCDNumber 1、QLCDNumber 类用于显示类似于 LCD 显示屏上的字符(见右图) ​ 2、QLCDNumber 类是 QFrame 类的直接子类,因此 QLCDNumber 以使用从 QFrame 类继承而来的边框效果 3、QLCDNumber 可显示的符号有:0,1,2,3,4,5,6,7,8,…

Docker——consul的容器服务更新与发现

一、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决手段…

OceanBase 如何实现多层面的资源隔离

OceanBase的资源隔离涵盖了多个方面,如物理机器间的隔离、不同租户之间的隔离、同一租户内的隔离,以及针对大型查询请求的隔离等。在实际应用OceanBase的过程中,我们经常会遇到这些操作场景或产生相关需求。这篇文章针对这些内容进行了简要的…

数据库系统原理实验报告5 | 数据查询

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ———— 本次实验使用到的图形化工具:Heidisql 目录 一、实验目的 二、实验内容 1.找出读者所在城市是“shangh…

垂起固定翼+多旋翼无人机+集群组网:高低空域协同组网通信技术详解

垂起固定翼、多旋翼无人机与自组网的结合,为高低空域协同组网通信技术提供了创新的解决方案。这种结合充分利用了各种技术的优势,使得无人机在高低空域中的协同作业和通信更加高效和灵活。 首先,垂起固定翼无人机以其垂直起降能力和长航时的…

第28章-PPPoE

1. 以太网接入的典型应用 1.1. IP技术的应用与发展 1.2. 以太网接入的典型应用场景之一——大型园区接入的典型应用 2. PPPoE技术的基本原理 2.1. 技术背景 2.2. PPPoE工作原理 2.3. PPPoE的两个阶段:Discovery阶段和PPPSession阶段 2.4. PPPoE的帧结构 2.5. PPPoE…

如何高效封装App?小猪APP分发平台一站式解决方案

在移动应用开发领域,App封装(App Packaging)是一个至关重要的环节,它不仅关乎应用的安全性,还直接影响到最终用户体验和市场推广策略。本文旨在通过实战指南,揭示如何高效完成App封装,并介绍如何…

python爬虫(二) 之 42号网汽车文章爬虫

python爬虫(二) 之 42号网汽车文章爬虫 今天在咸鱼上有个买家找我一个42号网汽车文章的爬虫,目前需求已经做完了,现在将这部分代码开源,供大家参考。爬虫能够抓取到网站上所有文章的数据,大概一小时左右就…

buuctf[pwn]

buuctf[PWN] 题目:rip(栈对齐) 知识点:栈对齐 题目地址:BUUCTF在线评测 (buuoj.cn)知识点:64位ubuntu18以上系统调用system函数时需要栈对齐,因为64位下的system函数有个movaps指令,这个指令要求内存地址…

​《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制德国每日风能和太阳能产量3D线图

在MATLAB中,要绘制3D线图,可以使用 plot3 函数。 在《MATLAB科研绘图与学术图表绘制从入门到精通》书中通过绘制德国每日风能和太阳能产量3D线图解释了如何在MATLAB中绘制3D线图。 购书地址:https://item.jd.com/14102657.html

读天才与算法:人脑与AI的数学思维笔记20_数学图灵测试

1. 数学图灵测试 1.1. 能不能将这种计算机证明语言翻译成易于与人交流的方式呢? 1.1.1. 剑桥大学的两位数学家蒂莫西高尔斯(Timothy Gowers)和莫汉加内萨林加姆(Mohan Ganesalingam)开展了此项研究 1.1.1.1. 他们决…

已解决SyntaxError: EOL while scanning string literal 亲测有效!!!

已解决SyntaxError: EOL while scanning string literal 亲测有效!!! 亲测有效 报错问题解决思路解决方法 报错问题 SyntaxError: EOL while scanning string literal 这个错误通常发生在Python代码中,表示字符串字面量没有被正确…

撸爆公众号流量主,简单无脑,单日变现2000+

详情介绍 目前公众号流量主的收益非常的好,不管你是小白还是老鸟,都能拿到一个很好的收益,轻轻松松日入2000,接下来我给大家带来一个保姆级的教学,大家跟着操作就可以了

360手机去除广告 360手机关闭弹窗广告 360手机刷机

360手机去除广告 360手机关闭弹窗广告 360手机刷机 360手机去广告 360手机刷机 360手机弹窗广告 永久去除360手机的各种广告教程 360手机禁止更新 360手机关闭广告 360手机去除内部广告 360手机资源网 360手机刷机资源下载链接:360rom.github.io 参考:…

C语言/数据结构——每日一题(链表的中间节点)

一.前言 今天我在LeetCode刷到了一道单链表题,想着和大家分享一下这道题:https://leetcode.cn/problems/middle-of-the-linked-list。废话不多说让我们开始今天的知识分享吧。 二.正文 1.1题目描述 1.2题目分析 这道题有一个非常简便的方法——快慢指…

xx学校(微信)挖掘

挖掘目标的部署在微信的资产(减少信息的收集,毕竟一般web站点没有账号密码不好进入后台,挖掘功能点少) 1. 寻找目标的微信小程序(非原图) 1. 招生小程序打不开,只能挖掘管理系统 进入后发现存在上报安全隐患功能,可以上传图片 1. 准备上传shell 发现控制上传名字参数为name,…

mysql数据库(排序与分页)

目录 一. 排序数据 1.1 排序规则 1.2 单列排序 1.我们也可以使用列的别名,给别名进行排序 2.列的别名只能在 ODER BY 中使用, 不能在WHERE中使用。 3.强调格式:WHERE 需要在 FROM 后, ORDER BY 之前 1.3 二级排序&…

【软考高项】三十三、质量管理

一、管理基础 质量定义 国际标准:反映实体满足主体明确和隐含需求的能力的特性总和。 国家标准:一组固有特性满足要求的程度。固有特性是指在某事或某物中本来就有的,尤其是那种永久的可区分的特征。 ➢ 对产品来说,例如…