密钥生成: a 选择两个大素数𝑝和𝑞,(𝑝≠𝑞,需要保密,步骤4以后建议销毁) b 计算𝑛=𝑝×𝑞,φ(n) =(𝑝-1)×(𝑞-1) c 选择整数 𝑒 使 (φ(n),𝑒) =1, 1<𝑒< φ(n) d 计算𝑑,使𝑑 = e^(-1) (modφ(n)), 得到:公钥为{𝑒, 𝑛}; 私钥为{𝑑}
加密: 用𝒆,𝒏: 明文𝑀<𝑛, 密文𝐶=M^e (𝑚𝑜𝑑 𝑛)
解密: 用𝒅,𝒏: 密文𝐶, 明文𝑀 =C^d (𝑚𝑜𝑑 𝑛)
算法实现
# 欧几里得算法求两个数字的最大公约数defgcd(a, b):if b ==0:return a
else:return gcd(b, a % b)'''
扩展欧几里的算法
计算 ax + by = 1中的x与y的整数解(a与b互质)
gcd(a, b) = a*xi + b*yi
gcd(b, a % b) = b*xi+1 + (a - [a/b]*b)*yi+1
gcd(a, b) = gcd(b, a % b) => a*xi + b*yi = a*yi+1 + b*(xi+1 - [a/b]*yi+1)
xi = yi+1
yi = xi+1 - [a/b]*yi+1
'''defext_gcd(a, b):if b ==0:
x1 =1
y1 =0
x = x1
y = y1
r = a
return r,