RSA算法:
1. 准备两个质数 pq
n= pq
2.求中间数L
l =最小公倍数(p-1,q-1) 为 144
3.求E
1<E<L
最大公约数(e,l)=1
4.求D
1<D<L
E*D mol L = 1
实践
1. 准备两个很小对质数
p = 17
q = 19
N = p*q = 323
2. L = 最小公倍数(16和18的) 为 144
3. 1<E<L 最大公约数(E和L) =1
即 1 <E < 144 最大公约数(E,144) = 1
取5吧
公钥(E、N) = (5,323)
4.求D 1<D<L E*DmodL = 1
即1<D<144 5*Dmod 144 = 1
显然当D=29时满足
1<29<144
5*29mod144 = 145mod 144 = 1
此时私钥= (D,N) = (29,323)
5.加密 准备的明文必须是小于N的数,因为加密或者解密都要mod N 其结果必须小于N
准备明文 = 123
则 密文=明文EmodN=1235mod323=225
6.解密
明文=密文DmodN=22529mod323=123
解密后的明文为123。
为什么这个算法很厉害:
假如我给你公钥(E、N)为(5,323)
那么你就能加密 算出 225这个密文,
然后把255这个密文发给我。
如果我没有私钥我怎么解密呢?
求D的方法是:
1<D<L
E*D mol L = 1
我知道E,N,
下面我需要知道L
如果想知道L需要先知道p-1和q-1
N是两个质数P*Q 但是我如果要找p-1和q-1呢 如果这个数超级大的话
大数分解本身就是一个数学上难题。