1.实现原理
1.随意选择两个大的质数p和q,p不等于q,计算N=pq。
2.根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)
3.选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
4.用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))
5.将p和q的记录销毁。e是公钥,d是私钥。d是秘密的,而N是公众都知道的。Alice将她的公钥e传给Bob,而将她的私钥d藏起来。
2.实现过程
例如,
1.选取两个质数3和5(因为是举例,所以选取的质数很小,实际过程中选取的质数是非常大的!).通过计算得出
N = 3 * 5 = 15;
2.根据欧拉函数,不大于15,且和15互质的整数个数为(3 - 1)X(5 - 1) = 8.
3.选择一个整数e和8互质,且e小于8,选取e=3,即3为公钥
4.根据公式计算私钥.(d * 3)%8 = 1,可以得出d = 3;
所以,公钥为(15,3),私钥为(15,3)
这是个特殊的例子,所以才会有公钥和私钥相同,实际上生成公私钥的数都非常大,生成的公私钥是很难相同的.
加密过程:
假设要加密的明文为2, 则加密后的密文为 密文 = 2^公钥%N, 即密文 = 8,
解密过程:
已知密文为8,则解密后的明文为 名文 = 密文^私钥%N,即明文 = 2.
用途:
加密算法可以用于加密信息,例如公布公钥和算法,客户端通过公钥对数据进行加密,然后发送给服务器,如果中间信息被截留,因为不知道私钥,且因为私钥选取的值非常大,所以很难计算出来,需要很长时间.即很难解密.然后服务器可以通过私钥进行解密.
这个加密算法还可以用于验证消息,比如让客户端持有指定公钥,然后通过服务器发送用指定私钥加密的信息,当用户用指定公钥解码开信息,就能确定这条消息是由服务器发送的.而不是冒名发送的.
算法缺陷:
1.要实现这种算法,首先要产生两个非常大的素数,所以守制于产生素数的技术.这就很难做到每次加密都采用唯一的公私钥.
2.安全性.随着现在计算速度和分解素数的增加,所以必须采用越来越长的素数作为因子.所以运算速度会越来越慢.
3.运算速度.由于采用的素数都是按照几百bits的长度选取的,所以增加了运算难度.进而增加了运算时间.