首先任取两个互质的整数: p, q
这两个数关系到加密强度,通常会非常大,但是在学习阶段,只需要取一个较小的数
计算乘积与欧拉函数
N=p⋅q=35φ=(p−1)⋅(q−1)=24
现在选取一个质数公钥 e,注意 e 必须小于 φ,且 e 不能是 φ 的因子
例如,我取 e=19
通过公式 (d*e) % φ = 1,可以计算出私钥
通过计算,我的私钥 e=43
通过 (num ** e) % N 可以实现加密,而 (num ** d) % N 则实现解密
称 (e,N) 为公钥对,(d,N) 为私钥对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| N = 35 e = 19 d = 43 class Key: def __init__(self, key, N): self.key = key self.N = N def RSA(num, key): return (num ** key.key) % key.N message = 12 publicKey = Key(e,N) privateKey = Key(d,N) 密文 = RSA(message, publicKey) 明文 = RSA(密文, privateKey) print("密文:" + str(密文)) print("明文:" + str(明文))
|
由于是通过余数计算,所以传递的数字 message 必须小于 N
如果想要加密更大的数字,可以适当的增大 p 和 q