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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ThreadLocal底层原理「建议收藏」

    ThreadLocal底层原理「建议收藏」ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri

    2022年8月9日
    3
  • radius认证服务器ip该怎么填_radius认证服务器拒绝原因

    radius认证服务器ip该怎么填_radius认证服务器拒绝原因1.AAA和Radius概述  AAA是验证授权和记账Authentication,Authorization,andAccounting的简称。它是运行于NAS上的客户端程序,它提供了一个用来对验证、授权和记账这三种安全功能进行配置的一致的框架。AAA的配置实际上是对网络安全的一种管理,这里的网络安全主要指访问控制,包括哪些用户可以访问网络服务器,具有访问权的用户可以得到哪些服务,如何

    2022年10月24日
    0
  • 该伙伴事务管理器已经禁止了它对远程/网络事务的支持[通俗易懂]

    该伙伴事务管理器已经禁止了它对远程/网络事务的支持

    2022年1月26日
    46
  • django mysqlclient_MySQL无法安装

    django mysqlclient_MySQL无法安装mac系统安装mysqlclient时,会报错OSError:mysql_confignotfound解决办法在项目路径下输入以下内容PATH="$PATH":/usr

    2022年7月31日
    1
  • 幸福课第11讲_笔记

    幸福课第11讲_笔记11例行公事1.身体反馈假说2.没有更多的自律3.认知重建4.总结:如何成为成功人士,专家5.日记知道我们为什么要考试吗?—为了让你主动去整合我们之前学过的东西,这个课每节之间有联系的,你要去总结身体反馈假说理论:你在和你自己交流,通过伪造行为上的笑等–你的思想也和其保持一致实验:内向男144分钟聊天—(异性在男生不知觉该实验的情况下,主动谈笑风生12分钟x6个x2次…

    2022年7月18日
    12
  • 大学计算机系最努力的同学都是如何学习的?

    经常会被同学们问到这个问题,要怎么努力才能找到好工作?学习好就能进好公司?屁!被学校教育坑的一把鼻涕一把泪的老学长来回答一波。我上大学时,连续三年得过国家励志奖学金,英语过六级,以为软考有用,还考了个软件设计师证书,以为四级有用,也考了个软件测试工程师证书,看人家用c++写软件,自学MFC写了几个桌面小程序。自以为很牛逼的去找工作,结果要价2500,都没人收,2011年,一个计算机系top级毕业生,薪资还没流水线的高。现在工作近十年,也辗转几个大厂,做校招、社招面试也不下于上百场,这

    2022年4月11日
    48

发表回复

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

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