RSA加密原理
1、选择一对不相等且足够大的质数
p、q
2、计算 p,q 的乘积
n = p * q
3、计算 n 的欧拉函数
φ(n) = (p - 1) * (q - 1)
4、选一个与 φ(n) 互质的整数 e
1 < e < φ(n)
5、计算出 e 对于 φ(n) 的模反元素 d
d * e mod φ(n) = 1
6、公钥
KU = (e, n)
7、私钥
KR = (d, n)
步骤 | 说明 | 描述 |
---|
1 | 选择一对不相等且足够大的质数 | p、q |
2 | 计算 p,q 的乘积 | n = p * q |
3 | 计算 n 的欧拉函数 | φ(n) = (p - 1) * (q - 1) |
4 | 选一个与 φ(n) 互质的整数 e | x 1 < e < φ(n) |
5 | 计算出 e 对于 φ(n) 的模反元素 d | d * e mod φ(n) = 1 |
6 | 公钥 | KU = (e, n) |
7 | 私钥 | KR = (d, n) |
加密流程
明文 M 加密 M^e mod n = C
密文 C 解密 C^d mod n = M
例题
p = 3
q = 11
n = 3 * 11 = 33
φ(n) = (3 - 1) * (11 - 1) = 20
与 φ(n) 互质的整数 1 < e < φ(n)
e = 3
e 对于 φ(n) 的模反元素 d
d * 3 mod φ(n) = 1
d * 3 mod 20 = 1
d = 7
加密 M = 20
KU = (3, 33)
密文 C = 20^3 mod 33 = 14
解密 C = 14
KR = (7, 33)
明文 M = 14^7 mod 33 = 20
代码
import gmpy2
p = 3
q = 11
n = p * q
phi_n = (p - 1) * (q - 1)
e = 3
d = gmpy2.invert(e, phi_n)
c = 14
m = pow(c, d, n)
print m