RSA加密算法
RSA加密算法的安全性分析

RSA加密算法的安全性分析RSA加密算法是一种公钥加密算法,广泛应用于加密通信中。
它的安全性是众所周知的,但是随着计算机技术的发展,RSA加密算法也面临着越来越大的挑战。
本文将对RSA加密算法的安全性进行分析,并探讨其存在的漏洞。
一、RSA加密算法的原理RSA加密算法是一种非对称加密算法,它的安全性基于大质数分解问题的难度。
其原理非常简单,通过选择两个大的质数p和q,计算它们的乘积n=p*q,然后选择一个整数e,使得1<e<φ(n)且e与φ(n)互质,其中φ(n)=(p-1)*(q-1)。
然后计算出一个整数d,使得d*e≡1 mod φ(n)。
e和n组成公钥,d和n组成私钥。
对于给定的明文M,RSA加密算法的加密过程为:C=M^e mod n,其中^表示乘方运算。
对于给定的密文C,RSA加密算法的解密过程为:M=C^d mod n。
二、RSA加密算法的安全性基于大质数分解问题的难度,也就是说,要破解RSA加密算法,需要将公钥n分解成p和q的乘积。
但是,随着计算机技术的发展,大质数分解问题已经不再是一个不可逾越的难关了。
目前,在硬件和算法结合的优化下,可以破解大约100位的RSA密钥。
因此,为了确保RSA加密算法的安全性,密钥的长度必须足够长,至少要达到2048位。
另外,RSA加密算法还存在着一些已知的漏洞,例如:1. 选择恶意公钥攻击。
在这种攻击中,攻击者会伪造一个看似合法的公钥,并将其作为目标用户的公钥。
然后,攻击者就可以在不知情的情况下监视目标用户的通信,从而窃取敏感信息。
2. 计时攻击。
在这种攻击中,攻击者会通过测量加密和解密操作的时间来猜测密钥的值。
这种攻击可以在一段时间内重复进行,从而加速密钥的猜测。
3. 分组攻击。
在这种攻击中,攻击者会通过多次加密和解密相同的明文或密文来推断密钥的值。
通过比较不同的密文或明文块的加密结果,攻击者可以得出有关密钥的信息。
三、RSA加密算法的安全性提升为了提高RSA加密算法的安全性,可以采取以下措施:1. 增加密钥的长度。
RSA算法加密流程

RSA算法加密流程1.密钥生成:1.随机选择两个不相等的质数p和q,并计算它们的乘积n=p*q。
2.计算φ(n)=(p-1)*(q-1),φ(n)被称为欧拉函数。
3.随机选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。
4.计算e关于φ(n)的模反元素d,即满足(e*d)%φ(n)=15.公钥为(n,e),私钥为(n,d),其中(n,e)对外公开,(n,d)保密保存。
2.加密过程:1.将明文消息转换为对应的整数M,满足0≤M<n。
2.使用公钥(n,e)对明文进行加密,计算密文C=(M^e)%n。
3.解密过程:1.使用私钥(n,d)对密文进行解密,计算明文消息M=(C^d)%n。
下面对RSA算法的加密流程进行详细解释:1.密钥生成:在此步骤中,需要生成一对公钥和私钥。
公钥(n,e)由生成的两个质数p和q的乘积n以及另一个整数e组成。
私钥(n,d)由n和e的一些衍生数学属性得到。
首先,在这一步中,随机选择两个不相等的质数p和q。
质数的选择尽量要大,并且保密。
然后计算乘积n=p*q,这将成为模数。
接着计算欧拉函数φ(n)=(p-1)*(q-1),它表示小于n且与n互质的整数的个数。
接下来,随机选择一个整数e,满足条件1<e<φ(n)且e与φ(n)互质。
互质的意思是e和φ(n)之间没有公因数。
然后,计算e关于φ(n)的模反元素d,即满足(e*d)%φ(n)=1、在这里,可以使用扩展欧几里得算法来计算d。
最后,公钥为(n,e),私钥为(n,d),其中(n,e)对外公开,(n,d)需要保密保存。
2.加密过程:在这一步中,使用公钥(n,e)对明文消息进行加密。
首先,将明文消息转换为对应的整数M,满足条件0≤M<n。
然后,计算密文C=(M^e)%n。
这里使用了模幂运算来保持计算效率。
3.解密过程:在这一步中,使用私钥(n,d)对密文进行解密。
首先,计算明文消息M=(C^d)%n。
RSA公钥密码算法

RSA公钥密码算法RSA公钥密码算法RSA(Rivest-Shamir-Adleman)是一种公钥密码算法,也是目前公认的最安全的加密算法之一。
它是由三位数学家Rivest、Shamir和Adleman在1977年提出的,由他们的姓氏命名。
RSA算法是第一个既能用于数据加密、又能用于数字签名的算法。
在RSA加密算法中,生成一对密钥,一个是公开的(称为公钥),一个是保密的(称为私钥)。
公钥和私钥是一对,用公钥加密的数据只能用私钥解密。
用私钥加密的数据只能用公钥解密。
而且公钥是可以公开的,它通常用于加密的数据,私钥通常用于解密的数据,用于签名的也是私钥。
RSA的安全基于大整数分解的难度。
RSA加密算法是非对称加密算法。
“非对称”指的是加密和解密使用的密钥是不同的,即一个用来加密,一个用来解密。
RSA加密算法的实现过程主要包括密钥生成、加密和解密三个部分。
密钥生成。
密钥生成包括选择两个不同的大质数p和q,计算n=p*q,然后计算欧拉函数φ(n)=(p-1)(q-1),然后获得整数e,使得1<e<φ(n)且e与φ(n)互素,e和φ(n)构成一对公钥,然后计算整数d,使得d*e ≡1(mod φ(n)),d和φ(n)构成一对私钥。
其中n是密钥长度,e是公钥指数,d是私钥指数。
加密和解密。
加密过程是明文M经过公钥e加密成密文C:C ≡ M^e(mod n)。
解密过程是密文C经过私钥d解密成明文M:M ≡ C^d(mod n)。
公钥(n, e)用于加密,私钥(n, d)用于解密。
RSA算法的安全性依赖于大数分解的困难性。
即使是今天最快的计算机,在有限的时间内也无法很好地分解一个非常大的、合数的公共模数。
这使得RSA算法成为一种安全可靠的加密方法。
同时RSA算法也被广泛应用于数字签名和密钥交换等领域。
除了加密和解密外,RSA算法还可以用于数字签名,这是因为私钥可以用于对数据进行签名,公钥可以用于验证签名。
rsa算法基本原理

rsa算法基本原理RSA算法基本原理RSA是一种非对称加密算法,它的基本原理是利用大素数的因数分解困难性来实现加密和解密的过程。
RSA算法由三个步骤组成:密钥生成、加密和解密。
1. 密钥生成RSA算法中,首先需要生成一对密钥:公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
密钥的生成过程如下:1.1 选择两个大素数p和q,并计算它们的乘积n=p*q。
n的长度决定了RSA算法的安全性。
1.2 计算n的欧拉函数φ(n)=(p-1)*(q-1)。
1.3 选择一个与φ(n)互质的整数e,1 < e < φ(n)。
1.4 计算e关于φ(n)的模反元素d,即满足e*d ≡ 1 (mod φ(n))的整数d,1 < d < φ(n)。
1.5 公钥为(n, e),私钥为(n, d)。
2. 加密加密过程是指使用公钥对原始数据进行加密的过程。
加密过程如下:2.1 将原始数据转换为整数m,满足0 ≤ m < n。
2.2 计算密文c ≡ m^e (mod n),即对m进行模n的指数操作。
2.3 密文c即为加密后的数据。
3. 解密解密过程是指使用私钥对密文进行解密的过程。
解密过程如下:3.1 计算明文m ≡ c^d (mod n),即对密文c进行模n的指数操作。
3.2 明文m即为解密后的数据。
RSA算法的安全性基于大整数的因子分解问题的困难性,因为在当前计算能力下,对于非常大的整数进行因子分解是非常耗时的。
这使得RSA算法在现实应用中具有较高的安全性。
除了加密和解密外,RSA算法还可以用于数字签名和密钥协商等领域。
数字签名是指用私钥对数据进行签名,然后用公钥进行验证,以确保数据的完整性和来源可靠性。
密钥协商是指两个通信方通过交换公钥来协商出一个共享的对称密钥,以便进行后续的加密通信。
总结一下,RSA算法是一种基于大整数的非对称加密算法,利用大素数的因子分解困难性来实现数据的加密和解密。
它的安全性建立在大整数因子分解问题的困难性上,适用于保护数据的机密性、完整性和来源可靠性。
简述rsa加密算法

简述rsa加密算法一、引言RSA加密算法是公钥加密算法的代表,由Ron Rivest、Adi Shamir 和Leonard Adleman三位数学家于1977年发明。
RSA算法的安全性基于大数分解这一NP难题,被广泛应用于信息安全领域。
二、RSA加密算法原理1. 公钥和私钥的生成:RSA算法使用两个大素数p和q作为私钥,并根据p和q计算出n=p*q作为公钥。
同时,根据欧拉函数φ(n)=(p-1)*(q-1),选择一个整数e与φ(n)互质作为公钥,再计算d=e^-1 mod φ(n)作为私钥。
2. 加密过程:发送方使用接收方的公钥对明文进行加密,加密后的密文只能由接收方使用其私钥进行解密。
具体地,将明文m转换成整数M,并计算C=M^e mod n得到密文。
3. 解密过程:接收方使用自己的私钥对密文进行解密,还原出原始明文。
具体地,将密文C计算出明文M=C^d mod n。
三、RSA加密算法实现1. 公钥和私钥的生成:选择两个大素数p和q,并计算n=p*q、φ(n)=(p-1)*(q-1)。
选择一个整数e与φ(n)互质,计算d=e^-1 mod φ(n)。
公钥为(n,e),私钥为(n,d)。
2. 加密过程:将明文m转换成整数M,并计算C=M^e mod n得到密文。
3. 解密过程:将密文C计算出明文M=C^d mod n。
四、RSA加密算法的安全性RSA算法的安全性基于大数分解这一NP难题,即对于一个大整数n=p*q,要找到p和q是困难的。
目前最好的分解方法是基于数域筛法和多项式求解器的广义数域筛法,但其时间复杂度依然非常高。
RSA算法在实际应用中具有较高的安全性。
五、RSA加密算法的应用RSA算法被广泛应用于信息安全领域,如数字签名、数据加密、证书认证等。
其中,数字签名可以保证信息的完整性和真实性;数据加密可以保护敏感信息不被窃取;证书认证可以确定通信双方身份并建立可信任的通信渠道。
六、总结RSA加密算法是一种公钥加密算法,在信息安全领域得到了广泛应用。
RSA加密算法

RSA加密算法一、RSA加密简介RSA加密算法是一种非对称加密算法。
在公开密钥加密和电子商业中RSA 被广泛使用。
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。
当时他们三人都在麻省理工学院工作。
RSA就是他们三人姓氏开头字母拼在一起组成的。
1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。
二、RSA原理RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
对极大整数做因数分解的难度决定了RSA算法的可靠性。
换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
尽管如此,只有一些RSA算法的变种被证明为其安全性依赖于因数分解。
假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。
但找到这样的算法的可能性是非常小的。
今天只有短的RSA钥匙才可能被强力方式解破。
到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
但在分布式计算和量子计算机理论日趋成熟的今天,RSA 加密安全性受到了挑战。
三、密钥生成随意选择两个大的质数p 和q ,p 不等于q ,计算q p n *=。
根据欧拉函数,求得 1)-(q 1)-(p = φ(q)φ(p) = φ(n)**选择一个整数e 使得 (n) φ e 1<<且1 = φ(n)) gcd(e, , (n, e) 作为公钥发布选择一个整数d 使得d 是e 关于模φ(n)的模反元素即φ(n)) (mod e d -1≡,φ(n)) (mod 1 ≡ e d *,把(n, d) 作为私钥保存。
RSA公钥密码算法

RSA公钥密码算法RSA公钥密码算法是一种非对称加密算法,最早由三位计算机科学家(Rivest, Shamir 和Adleman)于1978年发明。
RSA算法常常用于传输安全通信,签名和密钥协商。
RSA算法基于质因数分解的数学难题,其中B2的数字分解问题是一种重要的数学难题。
RSA算法的原理是基于两个大质数的乘积作为公钥,而且其中一个质数作为私钥。
在加密时,发送方使用接收方的公钥加密消息,然后发送给接收方,接收方则使用自己的私钥解密这条消息。
此外,RSA还可以用于数字签名。
发送方使用自己的私钥对信息进行数字签名,在发送给接收方之前,将数字签名附加到信息上。
接收方会使用发送方的公钥验证数字签名,以确保信息是由发送方签名的。
RSA算法的优点是其安全性高,难以被破解。
同时,RSA还能够处理大数字。
RSA算法的缺点是,算法运行速度较慢(尤其是在处理大数字时),而且加密和解密使用的公钥和私钥都需要密钥管理。
使用RSA算法时需要遵循以下步骤:1.生成公钥和私钥。
首先,需要找到两个相对较大的质数p和q,不要公开这两个数字。
计算p和q的乘积n(即RSA模数)。
然后生成φ(n)=(p-1)(q-1)。
选择一个整数e,满足1<e<φ(n),e和φ(n)互质。
选择可以用于解密的整数d,使得(e*d)mod φ(n)=1。
公钥就是(n,e),私钥就是(n,d)。
2.加密。
发送方将要发送的信息变成数字形式,然后使用接收方的公钥(n,e)加密这条消息,得到一个加密的数字。
然后发送加密后的数字给接收方。
3.解密。
接收方使用自己的私钥(n,d)解密加密的数字。
使用密文和相应的私钥计算明文,明文即为原始信息。
4.签名。
发送方使用自己的私钥(n,d)对信息进行数字签名,将数字签名附加到信息上,然后发送给接收方。
5.验证。
接收方使用发送方的公钥(n,e)验证数字签名。
接收方使用签名和公钥计算消息哈希值,并与发送方发送的原始哈希值进行比较。
RSA和DES加密算法详解

RSA算法可以用于生成数字签名,验证数据的完整性和来源,确保数据在传输过程中未 被篡改或伪造。
密钥管理
RSA算法可以用于密钥分发和交换,确保通信双方能够安全地共享密钥,进行加密通信。
DES的应用场景
保护金融交易
DES加密算法曾广泛应用于金融交易中,如 信用卡交易和银行转账,保护敏感信息不被 非法获取。
加密过程
将明文转换为数字后,使用公钥(e,n)进行加密,得到密文。解密过程则使用私钥(d,n)进行解密,还原出明文。
RSA算法的安全性
安全性基于大数因子分解
RSA算法的安全性主要基于大数因子分解的困难性。即使攻击者知道了公钥和密文,也很难通过计算 得到原始的明文。
密钥长度决定安全性
RSA算法的安全性取决于密钥长度。一般来说,密钥长度越长,RSA算法的安全性就越高。目前常用 的RSA密钥长度为2048位,被认为是足够安全的。
缺点
01
计算开销大
RSA加密算法相对于DES加密算法需要更多的计算资源和时间,因此在
处理大量数据时可能效率较低。
02
密钥长度较长
为了达到足够的安全强度,RSA加密算法通常需要较长的密钥长度(例
如2048位),这会增加实现和存储密钥的难度和成本。
03
可能遭受侧信道攻击
虽然RSA加密算法本身不容易遭受侧信道攻击,但在某些实现中可能会
暴露密钥信息,从而遭受攻击。
05
DES加密算法的优缺点
优点
安全性高
DES加密算法使用56位密钥,在256次试验中密和解密过程中速度较 快。
易实现
DES算法易于理解和实现,因此在许多编程语言中都 有现成的库可供使用。
缺点
密钥长度短
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RSA加密算法RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。
RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
RSA的安全基于大数分解的难度。
其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。
从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。
别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到:一、什么是“素数”?素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。
另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。
素数也称为“质数”。
二、什么是“互质数”(或“互素数”)?小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。
”这里所说的“两个数”是指自然数。
判别方法主要有以下几种(不限于此):(1)两个质数一定是互质数。
例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。
例如,3与10、5与 26。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。
如1和9908。
(4)相邻的两个自然数是互质数。
如 15与 16。
(5)相邻的两个奇数是互质数。
如 49与 51。
(6)大数是质数的两个数是互质数。
如97与88。
(7)小数是质数,大数不是小数的倍数的两个数是互质数。
如 7和 16。
(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。
如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。
等等。
三、什么是模指数运算?指数运算谁都懂,不必说了,先说说模运算。
模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。
怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。
例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
模指数运算就是先做指数运算,取其结果再做模运算。
如好,现在开始正式讲解RSA加密算法。
算法描述:(1)选择一对不同的、足够大的素数p,q。
(2)计算n=pq。
(3)计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e,且1<e<f(n)。
(5)计算d,使得de≡1 mod f(n)。
这个公式也可以表达为d ≡e-1 mod f(n) 这里要解释一下,≡是数论中表示同余的符号。
公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。
显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。
这就需要计算出d的值,让这个同余等式能够成立。
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。
若明文较长,可先分割成适当的组,然后再进行交换。
设密文为C,则加密过程为:。
(8)解密过程为:。
实例描述:在这篇科普小文章里,不可能对RSA算法的正确性作严格的数学证明,但我们可以通过一个简单的例子来理解RSA的工作原理。
为了便于计算。
在以下实例中只选取小数值的素数p,q,以及e,假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:(1)设计公私密钥(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d≡1 mod f(n),即3×d≡1 mod 20。
d怎样取值呢?可以用试算的办法来寻找。
试算结果见下表:通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。
因此,可令d=7。
从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。
(2)英文数字化。
将明文信息数字化,并将每块两个数字分组。
假定明文英文字母编码表为按字母顺序排列数值,即:则得到分组后的key的明文信息为:11,05,25。
(3)明文加密用户加密密钥(3,33) 将数字化明文分组信息加密成密文。
由C≡Me(mod n)得:因此,得到相应的密文信息为:11,31,16。
(4)密文解密。
用户B收到密文,若将其解密,只需要计算,即:用户B得到明文信息为:11,05,25。
根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。
你看,它的原理就可以这么简单地解释!当然,实际运用要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。
最后简单谈谈RSA的安全性首先,我们来探讨为什么RSA密码难于破解?在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。
破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。
从上文中的公式:d ≡e-1(mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我们可以看出。
密码破解的实质问题是:从Pq的数值,去求出(p-1)和(q-1)。
换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。
比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。
因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。
即RSA的重大缺陷是无法从理论上把握它的保密性能如何。
此外,RSA的缺点还有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。
RSA算法舉例說明(轉)2009-03-24 16:18KEY WORD: RSA,算法,RSA算法例子RSA算法基础->实践讲讲自己学习RSA中的实践过程,已经对RSA熟悉的看家就不用在此浪费时间了。
<一>基础RSA算法非常简单,概述如下:找两素数p和q取n=p*q取t=(p-1)*(q-1)取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)取d*e%t==1这样最终得到三个数: n d e设消息为数M (M <n)设c=(M**d)%n就得到了加密后的消息c设m=(c**e)%n则 m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。
在对称加密中:n d两个数构成公钥,可以告诉别人;n e两个数构成私钥,e自己保留,不让任何人知道。
给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。
rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法求得d。
<二>实践接下来我们来一个实践,看看实际的操作:找两个素数:p=47q=59这样n=p*q=2773t=(p-1)*(q-1)=2668取e=63,满足e<t并且e和t互素用perl简单穷举可以获得满主 e*d%t ==1的数d:C:\Temp>perl -e "foreach $i (1..9999){ print($i),last if $i*63%2668==1 }" 847即d=847最终我们获得关键的n=2773d=847e=63取消息M=244我们看看加密:c=M**d%n = 244**847%2773用perl的大数计算来算一下:C:\Temp>perl -Mbigint -e "print 244**847%2773"465即用d对M加密后获得加密信息c=465解密:我们可以用e来对加密后的c进行解密,还原M:m=c**e%n=465**63%2773 :C:\Temp>perl -Mbigint -e "print 465**63%2773"244即用e对c解密后获得m=244 , 该值和原始信息M相等。
<三>字符串加密把上面的过程集成一下我们就能实现一个对字符串加密解密的示例了。
每次取字符串中的一个字符的ascii值作为M进行计算,其输出为加密后16进制的数的字符串形式,按3字节表示,如01F代码如下:#!/usr/bin/perl -w#RSA 计算过程学习程序编写的测试程序#watercloud 2003-8-12#use strict;use Math::BigInt;my %RSA_CORE = (n=>2773,e=>63,d=>847); #p=47,q=59my $N=new Math::BigInt($RSA_CORE{n});my $E=new Math::BigInt($RSA_CORE{e});my $D=new Math::BigInt($RSA_CORE{d});print "N=$N D=$D E=$E\n";sub RSA_ENCRYPT{my $r_mess = shift @_;my ($c,$i,$M,$C,$cmess);for($i=0;$i < length($$r_mess);$i++){$c=ord(substr($$r_mess,$i,1));$M=Math::BigInt->new($c);$C=$M->copy(); $C->bmodpow($D,$N);$c=sprintf "%03X",$C;$cmess.=$c;}return \$cmess;}sub RSA_DECRYPT{my $r_mess = shift @_;my ($c,$i,$M,$C,$dmess);for($i=0;$i < length($$r_mess);$i+=3){$c=substr($$r_mess,$i,3);$c=hex($c);$M=Math::BigInt->new($c);$C=$M->copy(); $C->bmodpow($E,$N);$c=chr($C);$dmess.=$c;}return \$dmess;}my $mess="RSA 娃哈哈哈~~~";$mess=$ARGV[0] if @ARGV >= 1;print "原始串:",$mess,"\n";my $r_cmess = RSA_ENCRYPT(\$mess);print "加密串:",$$r_cmess,"\n";my $r_dmess = RSA_DECRYPT($r_cmess);print "解密串:",$$r_dmess,"\n";#EOF测试一下:C:\Temp>perl rsa-test.plN=2773 D=847 E=63原始串:RSA 娃哈哈哈~~~加密串:5CB6CD6BC58A7709470AA74A0AA74A0AA74A6C70A46C70A46C70A4解密串:RSA 娃哈哈哈~~~C:\Temp>perl rsa-test.pl 安全焦点(xfocus)N=2773 D=847 E=63原始串:安全焦点(xfocus)加密串:3393EC12F0A466E0AA9510D025D7BA0712DC3379F47D51C325D67B解密串:安全焦点(xfocus)<四>提高前面已经提到,rsa的安全来源于n足够大,我们测试中使用的n是非常小的,根本不能保障安全性,我们可以通过RSAKit、RSATool之类的工具获得足够大的N 及D E。