RSA算法公钥加密算法

合集下载

RSA公钥密码算法

RSA公钥密码算法

RSA公钥密码算法
RSA公钥密码算法是一种非对称加密算法,它能够确保数据的机密性、完整性和可信度。

RSA算法的主要原理是利用一个大素数的乘积作为公钥,而该素数的因数则作为私钥,从而实现加密和解密的功能。

RSA算法的步骤如下:
1. 选择两个大素数p和q,并计算它们的乘积n=p*q。

2. 计算n的欧拉函数φ(n)=(p-1)*(q-1)。

3. 选择一个整数e,使得1<e<φ(n)且e与φ(n)互质,e称为公钥。

4. 计算e的模反元素d,使得d*e ≡ 1 (mod φ(n)),d称为私钥。

5. 将n和e作为公钥,n和d作为私钥。

加密过程:
将明文m转换成一个整数M,满足0≤M<n。

然后计算密文c,c ≡ M^e (mod n),c为密文。

RSA算法的安全性基于大整数分解的困难性,即对一个大数n进行质因数分解的难度。

在当前计算能力下,大整数分解是一个困难的问题,因此RSA算法被广泛应用于数据加密
和安全通信领域。

RSA算法具有以下特点:
1. 安全性高:RSA算法基于大数分解的困难性,理论上很难被破解。

2. 加密解密速度慢:由于需要进行大数计算,RSA算法的运行速度相对较慢。

3. 适用范围广:RSA算法可以应用于数据加密、数字签名、密钥交换等多个方面。

4. 公钥传输安全:由于RSA公钥密码算法是非对称加密算法,公钥可以公开传输,而私钥则只能由接收者持有,确保了加密过程的安全性。

RSA公钥密码算法是一种安全性高、应用广泛的加密算法,它在保护数据传输的安全
性方面发挥着重要的作用。

rsa_public_decrypt 用法-概述说明以及解释

rsa_public_decrypt 用法-概述说明以及解释

rsa_public_decrypt 用法-概述说明以及解释1.引言1.1 概述RSA公钥加密算法是一种非对称加密算法,广泛应用于信息安全领域。

在RSA算法中,公钥用于加密数据,私钥用于解密数据。

而rsa_public_decrypt函数则是用于通过公钥解密数据的函数。

本文将详细介绍rsa_public_decrypt函数的用法及其在信息安全领域的应用。

在现代信息社会中,数据的安全性越来越受到重视。

加密算法就是一种保护数据安全的重要手段。

RSA公钥加密算法作为一种典型的非对称加密算法,具有较高的安全性和广泛的应用范围。

而rsa_public_decrypt 函数则是RSA算法中实现公钥解密的一个重要函数。

了解rsa_public_decrypt函数的用法及其在实际应用中的作用,有助于更好地保护数据的安全。

本文将对RSA算法进行简要介绍,并重点介绍rsa_public_decrypt函数的用法及其在信息安全领域的重要性。

希望通过本文的阐述,读者能够更深入地了解和应用RSA公钥加密算法,提高数据安全性,保护个人隐私信息。

1.2 文章结构本文将分为三个主要部分来介绍rsa_public_decrypt函数的用法。

首先,在引言部分概述了文章的背景和目的,以及文章结构的安排。

接着,在正文部分,我们将会先介绍RSA算法的基本原理和流程,然后详细介绍rsa_public_decrypt函数的功能和参数,最后讲解如何使用这个函数进行公钥解密操作。

最后,在结论部分,我们将总结本文的主要内容,讨论rsa_public_decrypt函数的应用场景,并展望未来可能的发展方向。

通过本文的阐述,读者将能够更全面地了解rsa_public_decrypt函数的用法及其在实际应用中的重要性。

1.3 目的在这篇文章中,我们的主要目的是介绍和探讨rsa_public_decrypt函数的用法。

RSA算法作为一种非对称加密算法,在数据加密和解密中有着广泛的应用。

rsa加密原理

rsa加密原理

rsa加密原理RSA加密算法(RSAencryptionalgorithm)是一种非对称加密算法,属于公钥加密算法中的代表性算法。

1979年,美国研究人员Ron Rivest、Adi Shamir和Leonard Adleman将它发表出来,他们凭着这个算法获得了2002年图灵奖。

RSA加密算法是基于数论研究而来,它不仅可以进行加密,还可以用来进行数字签名和密码学中的验证。

RSA加密算法的基本原理是公钥加密,即发送者使用接收者的公钥对数据进行加密,接收者使用该公钥的私钥对加密后的数据进行解密。

RSA加密算法的基本原理是:1、它视每一个公钥对(Public Key, PK)由两部分组成,称为e和n,其中n是一个大数,而e是小质数,它们都是唯一的并且同时公开的,但是n是一个很大的数,是不可能由人们推断出来的。

2、在RSA加密算法中,发送者使用接收者的公钥来加密信息,而接收者使用自己的私钥进行解密。

加密的前提是:发送者必须知道对方的公钥,而接收者必须记住自己的私钥,在RSA加密算法中,任何人都不可能通过仅有的一个公钥来计算出私钥。

3、在RSA加密算法中,数据是按照单个字节加密,然后被转换为一个二进制文件,信息将会被分割成一个个小段,每个小段都将会按照公钥加密,最终会组合在一起,来储存加密过的文件(Cipher text)。

而解密时,过程刚好相反:将加密后的文件分割成小段,分别按照私钥解密,最终将所有解密后的段组合在一起,恢复原始文本。

4、RSA加密算法的安全性取决于计算机的处理能力,它的安全性体现在:首先,只有拥有接收者的私钥的人才能够解密信息,即使把加密后的信息公开,也不会有安全隐患;其次,暴力破解RSA加密算法也是难以完成的,因为n这个大数是不能被推断出来的。

总之,RSA加密算法具有较高的安全性,可以有效地保护网络安全,是现代信息安全的重要组成部分。

当我们使用网银、购物网站等网络服务时,应该提高对RSA加密算法的安全性的认识,这样才能更好地保护自己的信息安全。

rsa公钥密码算法的原理

rsa公钥密码算法的原理

rsa公钥密码算法的原理宝子!今天咱们来唠唠那个超酷的RSA公钥密码算法的原理呀。

咱先想象一下,你有个超级机密的小秘密,就像你藏在心底最深处的暗恋对象的名字,你不想让别人知道,但是呢,又得告诉特定的人。

这时候密码算法就像一个神奇的小魔法啦。

RSA算法呀,它可是建立在一些数学魔法之上的哦。

这里面有两个超级重要的角色,一个是公钥,一个是私钥。

公钥呢,就像是你家的邮箱地址,谁都能看到,谁都能往这个地址寄东西。

私钥呢,就像是你家邮箱的钥匙,只有你自己有,只有用这个钥匙才能打开邮箱拿到里面的信件。

那这公钥和私钥是怎么来的呢?这里面就涉及到一些数学小把戏啦。

我们得找两个超级大的质数,大到什么程度呢?就像天上的星星一样多的位数那种。

比如说我们找到质数p和q,然后把它们相乘得到一个数n,这个n就像是一个大城堡,是整个算法的基础哦。

然后呢,我们还得通过一些数学公式算出另外两个数,e和d,e就是公钥的一部分,d就是私钥的一部分啦。

当你想把你的秘密信息发送给别人的时候,就用公钥来加密。

就好像你把你的小秘密放进一个带锁的盒子里,这个锁只能用公钥锁上,然后你就可以放心地把这个盒子寄出去啦。

别人拿到这个盒子,没有私钥的话,就像没有钥匙,怎么也打不开这个盒子,只能干瞪眼。

那这个加密过程是怎么在数学上实现的呢?其实就是把你的信息按照一定的数学规则,利用公钥中的e和n进行计算,把原本清晰的信息变成一串看起来乱七八糟的数字,就像你把一幅漂亮的画变成了一堆颜色杂乱的颜料块。

而当这个加密后的信息到达接收方的时候,接收方就可以用自己的私钥来解密啦。

这个私钥中的d就像是一把超级魔法钥匙,它可以把那些乱七八糟的数字还原成你原来的秘密信息。

这就好像把那些杂乱的颜料块又重新变回了漂亮的画。

你可能会想,为啥这个算法这么安全呢?这是因为要想从公钥推算出私钥,那就得把n分解成p和q这两个质数。

但是呢,对于超级大的n来说,这就像是在大海里找一根特定的针一样困难。

RSA公钥密码体制简介

RSA公钥密码体制简介
当要对明文进行加密时,可先进行预处理, 计算出m2、m3等,这种方法我们称之为窗口法。
32
例:
计算: 152013(mod 2539) 13 23 1 22 0 2 1 1101 B
(e3 , e2 , e1, e0 ) (1,1,0,1)
152013 mod2539
(((1520e3 )2 1520e2 )2 1520e1 )2 1520e0 (mod 2539) ((15202 1520)2 15200 )2 1520 (mod 2539)
14
RSA算法论证
假设截获密文C,从中求出明文M。他知道 M≡Cd mod n ,
因为n是公开的,要从C中求出明文M,必须先求 出d,而d是保密的。但他知道,
ed≡1 mod φ(n), e是公开的,要从中求出d,必须先求出φ(n),而 φ(n)是保密的。但他又知道,
φ(n)=(p-1)(q-1),
9
RSA算法论证
于是,M tφ(n) =bq+1,其中b为某整数。 两边同乘M, M tφ(n)+1 =bqM+M 。 因为M=ap,故 M tφ(n)+1 =bqap+M =abn+M 。 取模n得, M φ(n)+1 =M mod n 。
10
RSA算法论证
第二种情况:M=0 当M=0时,直接验证,可知命题成立。
加密过程:c=me mod n 解密过程:m=cd mod n
3
2、工作原理
定义:任给一个正整数m,如果用m去除任意两个整 数a、b所得的余数相同,称a、b对模m同余。记 为: a bmodm,若余数不同,则a、b对模m不同余。 记为: a b modm。
定理: a bmodm ,当且仅当m|(a-b)。

公钥分配的常用方法

公钥分配的常用方法

公钥分配的常用方法1. RSA算法:RSA算法是一种公钥加密算法,利用质数的乘积作为公钥和私钥的组成部分,广泛用于数据加密和数字签名的领域。

2. 椭圆曲线加密算法(ECC):ECC算法是利用椭圆曲线上的离散对数问题作为加密基础,其公钥是椭圆曲线上的点,适合于移动设备和资源受限的环境。

3. Diffie-Hellman密钥交换:Diffie-Hellman密钥交换协议是一种通过非安全通道交换密钥的方法,用于协商会话密钥,其公钥是基于离散对数难题的指数运算结果。

4. ElGamal加密算法:ElGamal加密算法是基于离散对数问题的加密算法,具有加密速度快、密钥长度短的特点,适合于移动通信等场景。

5. DSA数字签名算法:DSA算法是一种数字签名算法,基于离散对数难题,其公钥用于验证签名的有效性。

6. 基于身份的密码学(Id-Based Cryptography):这是一种使用用户的身份信息(如邮箱地址、手机号码等)作为公钥的加密算法,简化了密钥管理的问题。

7. 密钥派生函数(KDF):KDF是一种用于从共享的秘密信息派生出密钥的算法,其公钥派生过程可以用于安全地分配密钥。

8. 基于属性的加密(ABE):ABE是一种利用用户属性对数据进行加密和访问控制的加密方案,公钥是固定的系统参数。

9. Shamir's Secret Sharing算法:Shamir's Secret Sharing算法是一种用于将秘密信息拆分为多个片段并分配给多个参与者的方法,其公钥是用于验证融合秘密信息的有效性。

10. 门限加密(Threshold Cryptography):门限加密是一种分布式加密方案,其中多个参与者持有共享的密钥材料,需要达到一定门限才能解密数据。

11. 可搜索加密(Searchable Encryption):可搜索加密使得数据可以被加密存储在服务端,而用户可以使用公钥进行搜索操作,对于云存储、数据共享应用有重要价值。

rsa 公钥密码算法

rsa 公钥密码算法

rsa 公钥密码算法摘要:1.什么是RSA公钥密码算法2.RSA算法的基本原理3.RSA算法的应用领域4.RSA算法的安全性5.RSA算法的发展趋势正文:RSA公钥密码算法是一种非对称加密算法,由三位数学家Ron Rivest、Adi Shamir和Leonard Adleman于1977年发明。

该算法以其公开密钥和私有密钥的组合而闻名,允许用户以一种安全的方式进行加密和解密。

RSA算法的基本原理是利用两个大素数的乘积来生成公钥和私钥。

公钥由两个大素数的乘积以及一个与这两个素数互质的整数构成。

私钥则由两个大素数的乘积以及一个与这两个素数互质的整数构成。

公钥用于加密数据,私钥用于解密数据。

RSA算法的应用领域非常广泛,主要包括网络安全、电子商务、数字签名等。

在网络安全领域,RSA算法常用于保护数据的机密性和完整性;在电子商务领域,RSA算法常用于保护用户的账户信息和安全支付;在数字签名领域,RSA算法常用于验证文件的完整性和身份认证。

RSA算法的安全性主要取决于密钥的长度和生成方式。

如果密钥足够长,那么破解RSA算法将变得非常困难。

此外,RSA算法还采用了一种称为“公钥加密”的方式,使得即使密钥被盗,数据的安全性也不会受到影响。

随着计算机技术的发展,RSA算法的安全性面临着越来越大的挑战。

为了应对这些挑战,研究人员不断地提出了新的改进方案,如RSA-2048、RSA-4096等。

此外,一些新的非对称加密算法,如椭圆曲线密码算法,也在逐渐取代RSA算法。

总之,RSA公钥密码算法是一种非常重要的非对称加密算法,在现代通信和网络安全领域发挥着重要作用。

RSA算法公钥加密算法new

RSA算法公钥加密算法new

RSA1978年,MIT的Rivest、Shamir、Adleman提出RSA算法非对称加密(公开密钥加密)密码学的一次革命,定义:KA≠KB ,KA、E和D公开特点:基于数论原理(大数分解难题)是目前应用最广泛的公钥加密算法属于块加密算法在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。

此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。

RSA算法原理l 定义:RSA加密算法确定密钥:1. 找到两个大质数,p,q2. Let n=pq3. let m=(p-1)(q-1);Choose e and d such that de=1(%m).4. Publish n and e as public key. Keep d and n as secret key.加密:C=M^e(%n)解密:M=(C^d)%n其中C=M^e(%n) 为C%n=(M^e)%n存在的主要问题是大数计算和大数存储的问题。

什么是RSARSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。

即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n 至少也要600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RSA1978年,MIT的Rivest、Shamir、Adleman提出RSA算法非对称加密(公开密钥加密)密码学的一次革命,定义:KA≠KB ,KA、E和D公开特点:基于数论原理(大数分解难题)是目前应用最广泛的公钥加密算法属于块加密算法在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。

此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。

RSA算法原理l 定义:RSA加密算法确定密钥:1. 找到两个大质数,p,q2. Let n=pq3. let m=(p-1)(q-1);Choose e and d such that de=1(%m).4. Publish n and e as public key. Keep d and n as secret key.加密:C=M^e(%n)解密:M=(C^d)%n其中C=M^e(%n) 为C%n=(M^e)%n存在的主要问题是大数计算和大数存储的问题。

什么是RSARSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。

即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n 至少也要600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。

这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。

它易于理解和操作,也很流行。

算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

RSA的算法涉及三个参数,n、e1、e2。

其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;e1和e2可以互换使用,即:A=B^e2 mod n;B=A^e1 mod n;一、RSA 的安全性RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。

假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。

目前,RSA 的一些变种算法已被证明等价于大数分解。

不管怎样,分解n是最显然的攻击方法。

现在,人们已能分解多个十进制位的大素数。

因此,模数n 必须选大一些,因具体适用情况而定。

二、RSA的速度由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。

速度一直是RSA的缺陷。

一般来说只用于少量数据加密。

三、RSA的选择密文攻击RSA在选择密文攻击面前很脆弱。

一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。

然后,经过计算就可得到它所想要的信息。

实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:( XM )^d = X^d *M^d mod n前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。

但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction 对文档作HASH处理,或四、RSA的公共模数攻击若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。

最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。

设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:C1 = P^e1 mod nC2 = P^e2 mod n密码分析者知道n、e1、e2、C1和C2,就能得到P。

因为e1和e2互质,故用Euclidean算法能找到r和s,满足:r * e1 + s * e2 = 1假设r为负数,需再用Euclidean算法计算C1^(-1),则( C1^(-1) )^(-r) * C2^s = P mod n另外,还有其它几种利用公共模数攻击的方法。

总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。

解决办法只有一个,那就是不要共享模数n。

RSA的小指数攻击。

有一种提高RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。

但这样作是不安全的,对付办法就是e和d都取较大的值。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。

即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n 至少也要600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

目前,SET( Secure Electronic Transaction )协议中要求CA 采用比特长的密钥,其他实体使用比特的密钥。

在许多应用领域, 公钥密码技术在保障安全方面起了关键的作用在某些场合由于不便频繁更换私人密钥如权威机构的证书密钥、金融机构的签名密钥等, 确保密钥的安全就至关重要防止密钥泄露的一项决定性措施是采用门限密码技术, , 它将一部分密码的功能分散给多人, 而只有一定数量的成员合作方可完成密码运算另外, 在一些特殊场合也须谨防密钥的持有者权力过于集中而滥用职权, 这也要求对密钥进行分散管理, 以克服权力过于集中的弊端实现密钥分散管理的门限密码, 需要解决秘密的分享、密码算法以及结合这两者而设计出新的加密方式密码算法的研究一直是密码理论的主体, 目前已有许多算法可供选择使甩对秘密分享也早有雌, 它是指将系统的秘密s, 分解为N个部分秘密s1,s2,s3…,sn, 系统的N个成员P1,P2,..Pn分别拥有各自的部分秘密, 使得任何少于T个成员都无法从他们的部分秘密得到任何关于系统秘密s信息;借助有效的算法, 任意T成员可从相应的部分秘密得到系统的秘密s.这就是所谓的, (T,N)一门限秘密分享系统在实际应用中,秘密分享系统存在着不可回避的问题, 即由谁来完成从部分秘密恢复系统秘密的工作因为不论是谁, 他一旦得到了个部分秘密, 就可导出系统的秘密而独享, 除非秘密的恢复是由一个可信的“黑盒子”完成, 为了避免系统秘密的泄露, 文献2提出利用部分密钥将加密的部分结果发给指定的人或机器, 再由部分结果产生最终的结果, 而又不暴露系统的秘密目前, 门限密码已成为密码学中非常活跃的领域.RSA算法(转)2008-06-05 10:39<一>基础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-12use 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。

相关文档
最新文档