因数:
1×6=6
2×3=6
那么1,6,2,3都是因数
质数:
只能被1和它本身整除的数
余数:
就是python里的%求余(或者说取模运算)
非对称加密
公钥(7,33)
(E,N)
7=E,33=N
运算公式:明文的E次方%N=密文
元数据:C,A,O
这里用数字代替
明文(十进制):3,1,15
运算一下,就是3的7次方,1的7次方,15的七次方
求幂运算:2187,1,170859375
2187%33,1%33,170859375%33
求余后:9,1,27
然后会把9,1,27发给私钥端
私钥(?,33) ?这个代表的数字是不能让任何人知道的
?的值为3,也就是(3,33)
(3,33)
(D,N)
密文的D次方%N=明文
密文:9,1,27
也就是9的3次方,1的3次方,27的3次方
求幂后的值为:729,1,19683
729%33,1%33,19683%33
求余后的值:3,1,15
过程:
1.任意的2个质数(实际应用中这两个数越大就越难破解):p=3;q=11
2.质数相乘(密钥长度,并转换为二进制,这里33的二进制为100001,一共有6位,所以这个密钥就是6位,实际应用中,RSA密钥一般有1024位,重要场合为2048位):N=p×q=3×11=33
3.欧拉公式:T=(p-1)×(q-1)=2×10=20
4.选公钥E,需要满足的要求:质数;1 < 公钥 < T;不是T的因子,这里E选择了7,所以E=(7,33)。实际应用中,常常选择65537
5.算出私钥D:(D×E)%T=1 D=(3,33)
如果N可以破解,那么D就可以被算出,也就意味着私钥被破解。
但是大整数的因数分解是一件非常困难的事,除了暴力破解,目前还没有发现别的有效方法。
对极大整数做因数分解的难度决定了RSA算法的可靠性,也就是说,对一极大整数做因数分解越困难,RSA算法越可靠。
只要密钥长度足够长,用RSA加密的信息实际上是不能被破解的。
用公钥加密,用私钥解密。