RSA加密算法的加密与解密

转发原文连接:RSA加密算法加密与解密过程解析算法

1.加密算法概述安全

  加密算法根据内容是否能够还原分为可逆加密非可逆加密数据结构

  可逆加密根据其加密解密是否使用的同一个密钥而能够分为对称加密非对称加密函数

  所谓对称加密便是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C作简单的加密处理,对于每一个字符都和A作异或,造成密文S。解密的时候再用密文S和密钥A作异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,由于一旦加密用的密钥泄露了以后,就能够用这个密钥破解其余全部的密文。加密

  非对称加密在加密和解密过程当中使用不一样的密钥,即公钥和私钥。公钥用于加密,全部人均可见,私钥用于解密,只有解密者持有。就算在一次加密过程当中原文和密文发生泄漏,破解者在知道原文、密文和公钥的状况下没法推理出私钥,很大程度上保证了数据的安全性。spa

  此处,咱们介绍一种很是具备表明性的非对称加密算法,RSA加密算法。RSA算法是1977年发明的,全称是RSA Public Key System,这个Public Key就是指的公共密钥。.net

 2.密钥的计算获取过程 code

  密钥的计算过程为:首先选择两个质数p和q,令n=p*q。blog

  令k=ϕ(n)=(p−1)(q−1),原理见4的分析rem

  选择任意整数d,保证其与k互质

  取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程

  一样以一个字符串来进行举例,例如要对字符串the art of programming进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,而后开始加密解密过程过程。

1.      首先根据必定的规整将字符串转换为正整数z,例如对应为0到36,转化后造成了一个整数序列。

2.      对于每一个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。

3.      解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此获得正整数z。

4.      根据开始设定的公共转化规则,便可将z转化为对应的字符,得到明文。

4.RSA加密算法原理解析

  下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。

欧拉定理(Euler’s theorem)是欧拉在证实费马小定理的过程当中,发现的一个适用性更广的定理。
首先定义一个函数,叫作欧拉Phi函数,即ϕ(n),其中,n是一个正整数。
ϕ(n)=总数(从1到n−1,与n互质整数)
好比5,那么1,2,3,4,都与5互质。与5互质的数有4个。ϕ(5)=4
再好比6,与1,5互质,与2,3,4并不互质。所以,ϕ(6)=2
对于一个质数p来讲,它和1, 2, 3, …, p – 1都互质,因此ϕ(p)=p−1。好比ϕ(7)=6,ϕ(11)=10

  欧拉定理叙述以下:
  欧拉定理:若是n是一个正整数,a是任意一个非0整数,且n和a互质。那么,a^ϕ(n)−1能够被n整除。

  推论1:若是m和n是互质的正整数。那么,ϕ(mn)=ϕ(m)ϕ(n)

  推论2:[ab]n=[[a]n[b]n]n 

  证实:假设a和b除以n的余数为c1,c2。a和b能够写成a=nt1+c1,b=nt2+c2。那么,ab=n2t1t2+nt1c2+nt2c1+c1c2。所以ab除以n的余数为c1c2。即[ab]n=[a]n[b]n。

有以上定理后,由此能够推导出RSA算法的内在原理

  根据欧拉定理,对于任意z,若是z与n互质,那么:

[z^ϕ(n)]n=[z^k]n=[1]n

   所以,

[z^(de)]n=[z^(kt+1)]n=[z^(kt)*z]n=[z^kt]n*[z]n= [z]n   由于[z^k]n = [1]n

   上面主要使用了de=kt+1以及推论2。也就是说:

[z^(de)]n=[z]n

   根据2的推论,有

([z^e]n)^d=[z]n

  即d个余数相乘,由于其乘积可能大于n,因此由[ab]n=[[a]n[b]n]n,例如令a和b都为5,n为3,可知该结论

  故上式可描述为[([z^e]n)^d]n=[z]n=z,就是原数字乘方求余数,而后再乘方求余数后获得原来数字的过程,得证。

   公开的加密方式,私有的解密方式。RSA安全的关键在于很难对一个大的整数进行因子分解。

5.RSA加密的缺点

  1)产生密钥很麻烦,受到素数产生技术的限制,于是难以作到一次一密。
  2)安全性,RSA的安全性依赖于大数的因子分解,但并无从理论上证实破译RSA的难度与大数分解难度等价,并且密码学界多数人士倾向于因子分解不是NP问题。

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

相关文章
相关标签/搜索