RSA加密算法详细解说[通俗易懂]

RSA加密算法详细解说[通俗易懂]RSA加密算法是一种非对称加密算法,于1977年由罗纳德·李维斯特(RonRivest)阿迪·萨莫尔(AdiShamir)伦纳德·阿德曼(LeonardAdleman)一起提出的。RSA的优势:对极大整数做因数分解的难度决定了RSA算法的可靠性,对一极大整数做因数分解愈困难,RSA算法愈可靠加密由公钥,私钥,明文,密文,四部分组成。质数与互质数一个大于1的自然数,除了1和它本身…

大家好,又见面了,我是你们的朋友全栈君。

RSA加密算法是一种非对称加密算法,于1977年由
罗纳德·李维斯特(Ron Rivest)
阿迪·萨莫尔(Adi Shamir)
伦纳德·阿德曼(Leonard Adleman)一起提出的。

RSA的优势:对极大整数做因数分解的难度决定了RSA算法的可靠性,对一极大整数做因数分解愈困难,RSA算法愈可靠

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

质数与互质数

一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为质数(素数);否则称为合数。

例如,15=3×5,所以15不是素数
13除了等于13×1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数
1不是质数,也不是合数
公约数只有1的两个数,叫做互质数

取模运算

也就是求余数
例如,10 mod 3 = 1(10%3=1) 、26 mod 6 = 2 、28 mod 2 = 0

同余定理

“≡”是数论中表示同余的符号
同余的定义如下:
给定一个正整数m,如果两个整数a和b满足a – b能被m整除,即(a – b)modm=0,
那么就称整数a与b对模m同余,记作a ≡ b ( mod m),同时可成立a mod m = b
注意,同余与模运算是不同的
显然,有如下事实
(1)若a≡0(mod m),则m|a;
(2)a≡b(mod m)等价于a与b分别用m去除,余数相同。

欧拉函数

任意给定正整数n,计算在小于等于n的正整数之中,有多少个与n构成互质关系?计算这个值的方法就叫做欧拉函数,以φ(n)表示.

例如,在1到8之中,与8形成互质关系的是1、3、5、7,所以φ(n)=4

在RSA算法中,欧拉函数对以下定理成立
1.如果n可以分解成两个互质的整数之积,即n=p×q,则有:φ(n)=φ(pq)=φ( p )φ( q );
2.当p为质数,φ( p )=p-1

所以有φ(n)=(p-1)(q-1)

欧拉定理与模反元素

欧拉函数的用处,在于欧拉定理
“欧拉定理”指的是:
如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的等式成立:
a^φ(n)≡1(modn)
也就是说,a的φ(n)次方被n除的余数为1

模反元素的推导过程如下:
根据欧拉定理,有:
a^φ(n) = a × a^(φ(n)−1)≡1(modn)

b=a^(φ(n)−1),得:

ab≡1(modn)
b就是a的模反元素
所以,如果两个正整数a和n互质,那么一定可以找到整数b使得ab-1被n整除,或者说ab被n除的余数是1

所以求私钥d的公式:d*e≡1mod[(p-1)(q-1)]

其中{φ(n) = (p-1)(q-1),φ(n) 与e互质,k为正整数}
可化为:d= (k*φ(n)+1)/e

推导公式:d*e≡1mod φ(n)

可得:(d*e-1) / φ(n) =k

即:d = (k*φ(n)+1) / e

在这里插入图片描述

RSA密钥一般是1024位(安全)

由p,q,dp,dq,c求明文的算法

代码如下:

import gmpy2
I = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q)               #求幂取模运算

m = (((mp-mq)*I)%p)*q+mq       #求明文公式

print(hex(m))          #转为十六进制

一切以解题为目的的抄代码都是没有灵魂的,我们还是要从数学理论上去分析解决它,再去写代码。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130540.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android 系统签名实现的三种方式

    Android 系统签名实现的三种方式在项目开发时,如果需要使应用具有系统权限,例如可以支持静默安装和卸载APK,此时就需要使用系统签名。常用的系统签名方式包括在ubuntu环境下、手动签名和在AndroidStudio环境配置,三种方式中,实现最简单的是通过AndroidStudo方式,该方式的签名实现与正常的APK签名相同,唯一不同的就是签名文件是通过系统生成的。注意,无论采用何种签名方式,如果想实现具有系统权限的应用,在AP…

    2022年6月21日
    24
  • 【转载】来自 GitHub 的系列渗透测试工具

    【转载】来自 GitHub 的系列渗透测试工具51CTO2019-04-03渗透测试Kali-GNU/Linux发行版,专为数字取证和渗透测试而设计。(https://www.kali.org/)ArchStrike-为安全专业人士和爱好者提供ArchGNU/Linux存储库。(https://archstrike.org/)BlackArch-基于GNU/Linux的分布式渗透测试…

    2022年5月22日
    39
  • lorawan与lora的区别_交换机wan口和lan口的区别

    lorawan与lora的区别_交换机wan口和lan口的区别LoRaWAN与LoRa的区别在物联网技术快速发展的今天,NB-IoT、LoRa、SigFox等技术名词经常进入我们的视野中,对于刚刚接触物联网领域的人来说,在一大堆名词面前可能会混淆。面对类似于LoRa和LoRaWAN这样容易混淆的名词,其实只要系统梳理一下就可以发现其中的区别。今天我们就来看看LoRaWAN与LoRa两者的区别:……

    2022年10月19日
    2
  • jetbrains rider 激活码【2021免费激活】

    (jetbrains rider 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL…

    2022年3月27日
    959
  • origin画直线有锯齿_ps怎么让圆边缘没有锯齿

    origin画直线有锯齿_ps怎么让圆边缘没有锯齿使用环境(蓝色粗体字为特别注意内容)1、软件环境:Win732bit,OriginPro2018C.在使用Origin或者OriginPro画图的时候可能会遇到两个细节问题,1)曲线有锯齿,2)点与点之间的连线很尖锐,平滑。网上很多资料都提到Origin曲线平滑的问题,经笔者考究,所述的并不是本文中所指的点与点之间平滑的问题。废话少说,下面来看看原始数据:0.750.950….

    2022年9月21日
    3
  • Spring Boot 中的异步调用[通俗易懂]

    Spring Boot 中的异步调用[通俗易懂]SpringBoot中的异步调用通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行。而异步编程则没有这个限制,代码的调用不再是阻塞的。所以在一些情景下,通过异步编程可以提高效率,提升接口的吞吐量。这节将介绍如何在SpringBoot中进行异步编程。要开启异步支持,首先得在SpringBoot入口类上加上@EnableAsync注解:@SpringBootApplication@EnableAsyncpublic

    2022年7月11日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号