第一步,取两个互质的整数 p,q(就是两个数除了一个公共因子1外就没有其他的公共因子了)
在这里我取p=3,q=5
第二步 取s作为p和q的乘积
所以 s=p*q=15
取s1作为(p-1)和(q-1)的乘积
所以s1=2*4=8 (这个s1就是公钥和私钥的组成成分之一)
接下来在区间(1,s1)之间取一个与s1互质的整数e
这里我取e为3 (这个e就是公钥的组成成分之一)
根据公式(e*d)mod(s1)=1 求出d的值
3*d mod 8=1 解的到d可取3.(这个d就是私钥的组成成分)
所以我们就解得了
公钥(s,e)=(15,3)
私钥(s,d)=(15,3)
加密过程:
对数字m用公钥(s,e)进行加密得到密文t: (s,e)=(15,3),为简单起见设m=7
m^e mod s =t
所以7^3 % 15=13 ==》t=13
解密过程:
对密文t用私钥(s,d)进行解密得解密文m'
t^d mod s=m'
13^3 % 15=7
所以m'=m=7,加密后的密文可以被顺利解密
最后我们看看通过公钥是否可以找到一把对应的私钥
首先列举上面我们已经提到过的参数
质数 p,q
两质数乘积 s (s=p*q)
中间数s1 (s1=(p-1)*(q-1));
公钥的组成成分e 私钥的组成成分d
现在我们罗列下相应的数学关系式
s=p*q (p,q两个数互为质数)
s1=(p-1)*(q-1)
e*d %s1=1 (1<e<s1且与s1互为质数)
现在已经知道公钥(s,e),看看能否得到私钥成分d
要求到d,必须要求到s的两个质数q,p。
但是q和p这两个质数能够从s中分解出来吗,事实上,数值小的s能
被分解,随着数值s越来越大,分解成两个质数的难度也越来越大,
理论上以现阶段的的计算能力,RSA算法被破解的可能性为0.
例如s=1347318956317465198736981346571346759136498561347
341876534865239745634629384658293765293402340523485632
324593465938746598340234752384750923847523845723084572
613946237965139846136236473649182736481329613769238761
1236498134751305713752937513075283753104570381571232……
然后如何将其分解为一对互质的p和q呢?