参考
RSA加密与解密过程
生成公钥和私钥
- 生成两个大质数p和q(注意:p和q不要太接近),p和q的乘积为
N
,N
为密钥的长度,N
越大越安全,但计算速度越慢。比如:1
2
3p = 3 //随机选择的大质数一
q = 11 //随机选择的大质数二
N = p * q = 33 //密钥的长度 - 运用欧拉函数计算
T
1
T = (p - 1) * (q - 1) = 20
- 选取公钥
E
,公钥E
与T
的互质,且小于T
,E
取一个较大的质数,比如:1
2规则:E为小于T的质数,且不是T的因子(就是T不能被E整除)
比如:E = 7 //随机选择符合条件的公钥 - 计算私钥
D
1
2规则:(D * E) % T = 1 说明D和E的乘积除以T的余数为1
D = 3 - 成功获得公钥(E,N)即(7,33) 私钥(D,N)(3,33)
加密和解密
- 随机生成明文
M
,明文M
小于N
,比如:3 - 计算明文
M
的E
次幂,即3的7次方值 = 2187 - 计算幂对
N
的余数 2187 % 33 = 9 - 把最终的余数发送给服务器端
- 服务器端收到加密后的密文后,解密过程如下:
- 服务器端收到密文后,计算密文
C
的D
次幂,即9的3次方值 = 729 - 计算幂对
N
的余数 729 % 33 = 33
就是明文