详细解释RSA算法及涉及到的相关数学概念、定理。

body { margin: 0 }
div#mainBox { width: 100% }
div#mainBox div.rowBox { width: 100%; padding: 50px 0 }
div#mainBox div.rowBoxCenter { width: 1024px; margin: 0 auto; text-align: center }
div#mainBox div.rowBoxCenter h2, div#mainBox div.rowBoxCenter p { text-align: center; margin: 0 }
div#mainBox div.rowBoxCenter h2, div#mainBox div.rowBoxCenter h2 a { font-size: 35px; padding: 25px 0 20px; text-decoration: none; color: inherit; -webkit-transition: all .5s ease-out; -o-transition: all .5s ease-out; transition: all 0.5s ease-out }
div#mainBox div.rowBoxCenter h2 a:hover { font-size: 50px }
div#mainBox div.rowBoxCenter p { font-size: 16px; margin: 20px 0 10px }
div#mainBox div.rowBoxCenter ol.olList { text-align: left; font-family: “楷体”, “仿宋”; margin: 15px auto; padding-top: 10px; padding-bottom: 10px; line-height: 1.5; background-color: rgba(255, 255, 255, 0.1); border-left: 2px solid rgba(255, 255, 255, 0); border-right: 2px solid rgba(255, 255, 255, 0); transition: all 0.4s; font-size: 16px; padding-left: 40px }
div#mainBox div.rowBoxCenter ol.olList li { margin: 0 }
div#mainBox div.rowBoxCenter ol.olList:hover { background-color: rgba(255, 255, 255, 1); color: rgba(0, 0, 0, 1); border-left: 2px solid rgba(255, 255, 0, 1); border-right: 2px solid rgba(255, 255, 0, 1) }
span.eS { font-family: “Times New Roman”; font-style: italic; margin: 0 1px }
span.mS { font-family: “Times New Roman”; margin: 0 2px }
div#mainBox div.rowBoxCenter ol li.addMargin { margin-top: 15px; margin-bottom: 15px; font-size: 16px }
table, th, td { border: 1px solid rgba(0, 0, 0, 1); border-spacing: 0; text-align: center; line-height: 1.7; border-collapse: collapse; font-size: 16px }
th { font-family: “Consolas” }
table { width: 420px; margin: 10px auto }
div.twoBox { width: 650px; margin: 0 auto; position: relative }
div.twoBox div.leftBox { width: 50%; padding-top: 1px }
div.twoBox div.rightBox { position: absolute; padding-top: 1px; right: 0; top: 0; width: 50% }
div#mainBox div#rightMenuBox { position: fixed; right: -100px; top: 0; height: 100%; width: 200px; -webkit-transition: right .5s; -o-transition: right .5s; transition: right 0.5s }
div#mainBox div#rightMenuBox div#rightMenuBG { position: absolute; right: 0; height: 100%; width: 40px }
div#mainBox div#rightMenuBox div#rightMenuBG div#rightTopLogo { height: 145px; width: 100%; background-color: rgba(0, 153, 204, 1); cursor: pointer; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightMenuTopBG.png”); background-repeat: no-repeat; background-position: center; color: rgba(0, 153, 204, 1) }
div#mainBox div#rightMenuBox div#rightMenuBG div#rightTopLogo:hover { background-color: rgba(2, 113, 216, 1); color: rgba(2, 113, 216, 1) }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox { margin-top: 160px; padding: 0; position: relative; z-index: 9; margin-left: 0 }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li { height: 40px; width: 130px; margin-left: 70px; list-style: none !important; margin-bottom: 0 }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a.rightBtnTitle { text-decoration: none; width: 0; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; height: 40px; background-color: rgba(34, 43, 48, 1); float: left; text-align: center; line-height: 40px; color: rgba(255, 255, 255, 1); font-size: 13px; font-family: “Microsoft YaHei”; overflow: hidden; position: relative; left: 90px }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li:hover a.rightBtnTitle { width: 90px; left: 0 }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a.rightBtnLink { display: block; width: 24px; height: 24px; float: right; background-position: center; background-repeat: no-repeat; background-color: rgba(3, 114, 216, 1); border-radius: 12px; margin-top: 8px; margin-right: 8px; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li:hover a.rightBtnLink { border-radius: 0; margin-top: 0; margin-right: 0; width: 40px; height: 40px }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a#rightHomeLink { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightHomeLogo.png”) }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a#rightCnblogsLink { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightCnblogsLogo.png”) }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a#rightCallLink { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightCallLogo.png”) }
div#mainBox div#rightMenuBox ul#rightNavBox { width: 200px; margin: 20px 0 0; padding-left: 0; position: relative; z-index: 9 }
div#mainBox div#rightMenuBox ul#rightNavBox li { width: 40px; height: 15px; list-style: none !important; overflow: hidden; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; position: relative; margin-left: 160px; margin-bottom: 0 }
div#mainBox div#rightMenuBox ul#rightNavBox li:hover { height: 40px; width: 200px; margin-left: 0 }
div#mainBox div#rightMenuBox ul#rightNavBox li a { display: inline-block; position: absolute; height: 40px; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s }
div#mainBox div#rightMenuBox ul#rightNavBox li a.sTitle { width: 140px; padding: 0 10px; left: 40px; -ms-text-overflow: ellipsis; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; line-height: 40px; text-align: center; background-color: rgba(34, 43, 48, 1); color: rgba(255, 255, 255, 1); font-size: 13px; font-family: “Microsoft YaHei”; text-decoration: none }
div#mainBox div#rightMenuBox ul#rightNavBox li:hover a.sTitle { left: 0 }
div#mainBox div#rightMenuBox ul#rightNavBox li a.sColor { width: 40px; left: 0; z-index: 99 }
div#mainBox div#rightMenuBox ul#rightNavBox li:hover a.sColor { left: 160px }
div#mainBox div#rightMenuBox ul#rightButtonBox { position: absolute; right: 0; bottom: 0; padding: 0; z-index: 99; margin: 0; width: 135px }
div#mainBox div#rightMenuBox ul#rightButtonBox li { list-style: none; height: 40px; width: 40px; position: relative; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; overflow: hidden; margin-left: 95px }
div#mainBox div#rightMenuBox ul#rightButtonBox li:hover { width: 135px; margin-left: 0 }
div#mainBox div#rightMenuBox ul#rightButtonBox li a { text-align: center; display: inline-block; height: 40px; line-height: 40px; color: rgba(255, 255, 255, 1); font-size: 13px; font-family: “Micrisoft YaHei”; text-decoration: none; position: absolute; background-repeat: no-repeat; background-position: center; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; z-index: 99 }
div#mainBox div#rightMenuBox ul#rightButtonBox li a.rbtnTips { width: 95px; background-color: rgba(34, 43, 48, 1); left: 40px }
div#mainBox div#rightMenuBox ul#rightButtonBox li:hover a.rbtnTips { left: 0 }
div#mainBox div#rightMenuBox ul#rightButtonBox li a.rbtnLogo { width: 40px; height: 40px; background-color: rgba(34, 43, 48, 1); left: 0 }
div#mainBox div#rightMenuBox ul#rightButtonBox li:hover a.rbtnLogo { background-color: rgba(2, 113, 216, 1); left: 95px }
div#mainBox div#rightMenuBox ul#rightButtonBox li a#iTalk { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightTalkLogo.png”) }
div#mainBox div#rightMenuBox ul#rightButtonBox li a#iTop { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightTopLogo.png”) }
div#mainBox div#rightMenuBox { position: fixed; right: -100px; top: 0; height: 100%; width: 200px; -webkit-transition: all 1s; -o-transition: all 1s; transition: all 1s }
div#mainBox div#rightMenuBox div#rightMenuBG { position: absolute; right: 0; height: 100%; width: 40px; -webkit-transition: all .5s; -o-transition: all .5s; transition: all 0.5s }
div#mainBox div#rightMenuBox div#rightMenuBG a#rightTopLogo { display: block; height: 145px; width: 100%; background-color: rgba(0, 153, 204, 1); cursor: pointer; -webkit-transition: all .4s ease-out; -o-transition: all .4s ease-out; transition: all 0.4s ease-out; background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightMenuTopBG.png”); background-repeat: no-repeat; background-position: center; color: rgba(0, 153, 204, 1); z-index: 9; position: relative }
div#mainBox div#rightMenuBox div#rightMenuBG a#rightTopLogo:hover { background-color: rgba(2, 113, 216, 1); color: rgba(2, 113, 216, 1) }
div#mainBox div#rightMenuBox ul { -webkit-transition: all .4s ease-out; -o-transition: all .4s ease-out; transition: all 0.4s ease-out }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox { margin-top: 160px; padding: 0; position: relative; z-index: 9; margin-left: 0 }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li { height: 40px; width: 130px; margin-left: 70px; list-style: none !important; margin-bottom: 0 }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a.rightBtnTitle { text-decoration: none; width: 0; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; height: 40px; background-color: rgba(34, 43, 48, 1); float: left; text-align: center; line-height: 40px; color: rgba(255, 255, 255, 1); font-size: 13px; font-family: “Microsoft YaHei”; overflow: hidden; position: relative; left: 90px }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li:hover a.rightBtnTitle { width: 90px; left: 0 }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a.rightBtnLink { display: block; width: 24px; height: 24px; float: right; background-position: center; background-repeat: no-repeat; background-color: rgba(3, 114, 216, 1); border-radius: 12px; margin-top: 8px; margin-right: 8px; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li:hover a.rightBtnLink { border-radius: 0; margin-top: 0; margin-right: 0; width: 40px; height: 40px }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a#rightHomeLink { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightHomeLogo.png”) }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a#rightCnblogsLink { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightCnblogsLogo.png”) }
div#mainBox div#rightMenuBox ul#rightMenuBtnBox li a#rightCallLink { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightCallLogo.png”) }
div#mainBox div#rightMenuBox ul#rightNavBox { width: 200px; margin: 20px 0 0; padding-left: 0; position: relative; z-index: 9 }
div#mainBox div#rightMenuBox ul#rightNavBox li { width: 40px; height: 15px; list-style: none !important; overflow: hidden; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; position: relative; margin-left: 160px; margin-bottom: 0 }
div#mainBox div#rightMenuBox ul#rightNavBox li:hover { height: 40px; width: 200px; margin-left: 0 }
div#mainBox div#rightMenuBox ul#rightNavBox li a { display: inline-block; position: absolute; height: 40px; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s }
div#mainBox div#rightMenuBox ul#rightNavBox li a.sTitle { width: 140px; padding: 0 10px; left: 40px; -ms-text-overflow: ellipsis; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; line-height: 40px; text-align: center; background-color: rgba(34, 43, 48, 1); color: rgba(255, 255, 255, 1); font-size: 13px; font-family: “Microsoft YaHei”; text-decoration: none }
div#mainBox div#rightMenuBox ul#rightNavBox li:hover a.sTitle { left: 0 }
div#mainBox div#rightMenuBox ul#rightNavBox li a.sColor { width: 40px; left: 0; z-index: 99 }
div#mainBox div#rightMenuBox ul#rightNavBox li:hover a.sColor { left: 160px }
div#mainBox div#rightMenuBox ul#rightButtonBox { position: absolute; right: 0; bottom: 0; padding: 0; z-index: 99; margin: 0; width: 135px }
div#mainBox div#rightMenuBox ul#rightButtonBox li { margin: 0 0 0 95px; list-style: none !important; height: 40px; width: 40px; position: relative; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; overflow: hidden }
div#mainBox div#rightMenuBox ul#rightButtonBox li:hover { width: 135px; margin-left: 0 }
div#mainBox div#rightMenuBox ul#rightButtonBox li a { text-align: center; display: inline-block; height: 40px; line-height: 40px; color: rgba(255, 255, 255, 1); font-size: 13px; font-family: “Micrisoft YaHei”; text-decoration: none; position: absolute; background-repeat: no-repeat; background-position: center; -webkit-transition: all .3s; -o-transition: all .3s; transition: all 0.3s; z-index: 99 }
div#mainBox div#rightMenuBox ul#rightButtonBox li a.rbtnTips { width: 95px; background-color: rgba(34, 43, 48, 1); left: 40px }
div#mainBox div#rightMenuBox ul#rightButtonBox li:hover a.rbtnTips { left: 0 }
div#mainBox div#rightMenuBox ul#rightButtonBox li a.rbtnLogo { width: 40px; height: 40px; background-color: rgba(34, 43, 48, 1); left: 0 }
div#mainBox div#rightMenuBox ul#rightButtonBox li:hover a.rbtnLogo { background-color: rgba(2, 113, 216, 1); left: 95px }
div#mainBox div#rightMenuBox ul#rightButtonBox li a#iTalk { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightTalkLogo.png”) }
div#mainBox div#rightMenuBox ul#rightButtonBox li a#iTop { background-image: url(“http://images.cnblogs.com/likecs_com/hykun/607566/o_rightTopLogo.png”) }
.hideLogo { top: -150px }
.showLogo { top: 0 }
.moveUl { top: -150px }
.moveUlPlus { top: -300px }
.moveUlPro { top: -500px }
.returnUl { top: 0 }
.hideMenu { left: 100px }
.showMenu { left: 0 }
.showBG { background-color: rgba(34, 43, 48, 1) }
.hideBG { }

前言:在RSA诞生之前

RSA算法是最重要算法之一

它是计算机通信安全的基石,安全可靠

只要有计算机网络的地方,就有RSA算法

在它诞生之前,即1976年以前,加解密信息使用同一种规则

  1. 甲方选择某一种加密规则,对信息进行加密;
  2. 乙方使用同一种规则,对信息进行解密。

虽然理论上,只要加解密“规则”(即“密钥”)足够复杂,这种方式也可安全的传递信息

但这种方法最大的弱点就是,密钥在传递的过程中易被泄露

这种加密和解密使用同样规则的方法,被称为“对称加密算法”

RSA算法

倘若在加解密信息的过程中,能让加密密钥(公钥)与解密密钥(私钥)不同,即

  1. 甲要传密信给乙,乙先根据某种算法得出本次与甲通信的公钥与私钥;
  2. 乙将公钥传给甲(公钥可以让任何人知道,即使泄露也没有任何关系);
  3. 甲使用乙传给的公钥加密要发送的信息原文m,发送给乙密文c
  4. 乙使用自己的私钥解密密文c,得到信息原文m .

就可以很好的克服对称加密算法的弱点,这种新的加密模式被称为“非对称加密算法”

可以观察到,从始至终,私钥一直都在信息接收方乙处

只要乙自己不泄露出去,私钥就没有泄露的可能

1977年,三位数学家RivestShamirAdleman设计了一种算法,可以实现非对称加密

这种算法用他们三个人的名字首字母命名,叫做RSA算法

RSA算法非常可靠,密钥越长,它就越难破解

至于难以破解的原理(安全性),在本文介绍完该算法后会有简要说明

下面,先介绍一些基本概念与数学定理

质数与互质数

这是小学数学的概念

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

例如,15=3×5,所以15不是素数

13除了等于13×1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数

1不是质数,也不是合数

  1. 公约数只有1的两个数,叫做互质数。

判断或选取互质数的方法/定理有很多,如下所示

  1. 任意两个质数一定构成互质数(如3115361);
  2. 大数是质数的两个数一定是互质数(如9788);
  3. 一个质数如果不能整除另一个合数,这两个数为互质数;
    即一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系(如310526);
  4. 1和任何一个自然数在一起都是互质数;
  5. 相邻的两个自然数是互质数(如1516);
  6. 相邻的两个奇数是互质数(如4951)。

RSA算法中,我们通常使用以上第1条与第2

即选取两个本身都是质数的数作为互质数

而以上第2条定理对于计算欧拉函数值有着积极作用

模运算

模运算的定义如下

  1. m去被n整除,只取所得的余数作为结果,就叫做模运算。

例如,10 mod 3 = 1 、26 mod 6 = 2 、28 mod 2 = 0

同余

”是数论中表示同余的符号

同余的定义如下

  1. 给定一个正整数m,如果两个整数ab满足a-b能被m整除,即(a-b)modm=0
    那么就称整数ab对模m同余,记作ab(modm),同时可成立amodm=b

再次提醒注意,同余与模运算是不同的

ab(modm)仅可推出b=amodm

欧拉函数

欧拉函数本身需要一系列复杂推导,本部分仅介绍对认识RSA算法有帮助的部分

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

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

RSA算法中,我们需要明白欧拉函数对以下定理成立

  1. 如果n可以分解成两个互质的整数之积,即n=p×q,则有:φ(n)=φ(pq)=φ(p)φ(q);
  2. 根据“大数是质数的两个数一定是互质数”可以知道:
    一个数如果是质数,则小于它的所有正整数与它都是互质数;
    所以如果一个数p是质数,则有:φ(p)=p1

由上易得,若我们知道一个数n可以分解为两个质数pq的乘积,则有

φ(n)=(p1)(q1)

欧拉定理与模反元素

欧拉函数的用处,在于欧拉定理

“欧拉定理”指的是

  1. 如果两个正整数an互质,则n的欧拉函数φ(n)可以让下面的等式成立:
    aφ(n)1(modn)

也就是说,aφ(n)次方被n除的余数为1

模反元素的推导过程如下

  1. 根据欧拉定理,有:
    aφ(n)=a×aφ(n)11(modn)
    b=aφ(n)1,得:
    ab1(modn)
    b就是a的模反元素

意即,如果两个正整数an互质,那么一定可以找到整数b

使得ab1n整除,或者说abn除的余数是1

真实的例子

根据以上介绍的定义和数学知识

先来看一个真实的例子加深印象

假设甲要发送一串秘密数字m=65给乙

乙发送了一个公钥(n,e)=(3233,17)给甲

甲根据以下公式及公钥对密文m加密成c

mec(modn)

代入得

c=memodn=6517mod3233=2790

甲将使用公钥加密的密文c=2790发送给乙

乙收到c=2790的密文后,使用私钥(n,d)=(3233,2753)根据以下公式进行解密

cd=m(modn)

代入得

m=cdmodn=27902753mod3233=65

乙使用与公钥不同的私钥成功计算出密文m,发现了吗?

从始至终,用来解密的私钥(n,d)=(3233,2753)一直都在乙处,从未泄露

乙给甲的仅仅是用来加密的公钥(3233,17)

这个公钥并不能用来解密,即使被他人截获,也没有任何泄密的风险

那么,乙是如何计算出给甲的公钥(3233,17)和私钥(3233,2753)的呢?

计算密钥

根据以上“真实的例子”

看看乙是如何计算密钥(公钥和私钥)的

  1. 随机选择两个不相等的质数pq(乙选择了6153
  2. 计算pq的乘积n=p×q=61×53=3233
  3. 根据本文“欧拉函数”介绍过的公式
    φ(n)=(p1)(q1)
    代入计算n的欧拉函数值
    φ(3233)=(611)×(531)=60×52=3120
  4. 随机选择一个整数e,条件是1<e<φ(n),且eφ(n)互质
    乙就在13120之间,随机选择了17
  5. 因为eφ(n)互质,根据求模反元素的公式计算e,对于e的模反元素d有:
    ed1(modφ(n))
    这个式子等价于
    (ed1)/φ(n)=kk为任意正整数)

    edkφ(n)=1,代入数据得:
    17d3120k=1
    实质上就是对以上这个二元一次方程求解
    得到一组解为:(d,k)=(2753,-15)
  6. ne封装成公钥,nd封装成私钥
    n=3233e=17d=2753
    所以公钥就是(3233,17),私钥就是(3233,2753)

其中,n的长度就是密钥长度,3233写成二进制是110010100001

一共有12位,所以这个密钥就是12

实际应用中,RSA密钥一般是1024位,重要场合则为2048

密钥组成与加解密公式

公钥KU n:质数p和质数q的乘积(pq必须保密)
e:与(p-1)×(q-1)互质
私钥KR n:同公钥n
de1(mod(p1)(q1))
加密 c=memodn
解密 m=cdmodn

安全性

根据以上实例,也许会有疑问

公钥中已包含n=3233,我将其因式分解回n=3233=61×53

再根据乙计算密钥的流程,不就可以根据公钥得出私钥了

事实上,RSA的安全性就是源自你没办法轻易的对大整数“因式分解”

上面的例子,密钥长度是12

因为这只是个示例,所以密钥长度实在是太短了

你可以将示例中的n作因式分解,但是你没法对下面这个整数进行因数分解

12301866845301177551304949
58384962720772853569595334
79219732245215172640050726
36575187452021997864693899
56474942774063845925192557
32630345373154826850791702
61221429134616704292143116
02221240479274737794080665
351419597459856902143413

它等于这样两个质数的乘积:

×

33478071698956898786044169
84821269081770479498371376
85689124313889828837938780
02287614711652531743087737
814467999489

36746043666799590428244633
79962795263227915816434308
76426760322838157396665112
79233373417143396810270092
798736308917

事实上,这大概是人类已经分解的最大整数(232个十进制位,768个二进制位)

对极大整数做因数分解的难度决定了RSA算法的可靠性

实际应用中,RSA密钥一般是1024位(安全),重要场合则为2048位(极其安全)

一点感想

明天早上考大学生涯最后一门课程《网络安全》

其中重点中的重点便是RSA算法

课本讲得很随意,还是得参考一些资料

包括阮一峰先生的两篇文章RSA算法原理(一)》RSA算法原理(二)》

和一些其它资料,如《用实例给新手讲解RSA加密算法》

读懂并整理加入了一些自己的想法,完成本文并共享之

就当学生考试生涯结束前的一点纪念吧

若有纰误或不足,欢迎您留言指正

版权声明:本文为hykun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hykun/p/RSA.html