过去几天我一直在尝试用Python实现RSA算法。我的代码适用于较小的素数(至少可以达到前100万个素数)。然而,当尝试使用4900万到5000万分之一时,我的代码崩溃并给出了错误的结果。在
例如,当使用素数11和17作为起始素数时,我得到以下密钥:public:(3187)和private:(107187)。用这个加密数字50,密文是84,然后解密回50。在
然而,当使用质数961752619和961752931来加密数字50时,我得到781250000000,解密后得到482883073917854018。在
我用后一对素数尝试了前50000个数字,但没有一个返回正确的值。显然这里出了点问题,但我不知道是什么。我已经在我的代码中加入了a pastebin link,我也把代码粘贴在帖子下面。在def gcd(a, b):
if b > a:
if b % a == 0:
return a
else:
return gcd(b % a, a)
else:
if a % b == 0:
return b
else:
return gcd(b, a % b)
def find_d(phi_n,e):
k = 1
mod0 = False
while not mod0:
d = (k*phi_n+1)/e
if(d % 1 == 0):
return d
k+=1
def find_e(phi_n):
e = 3
while True:
if not gcd(e,phi_n) == 1:
e+=2
else:
return e
def generate_keys(p1,p2):
n = p1*p2
phi_n = (p1-1)*(p2-1)
e = find_e(phi_n)
d = int(find_d(phi_n,e))
return ((e,n),(d,n))
def endecrypt(key,m):
return pow(m,key[0],key[1])