2017-08-29 64 views
0

我一直在試圖用過去一週半的時間,沒有運氣的情況下用Python生成大質數來進行RSA加密。費馬原理性測試在512比特的尺度下是不可行的,我無法將我的頭圍繞米勒 - 拉賓。 (我13歲)所有在線腳本似乎都可以在我使用的Python版本下工作。我應該怎麼做才能生成大量素數? (是的,概率素數都很好。)生成大的(512位+)素數python 3.6

+1

對於您感興趣的大小的數字,Fermat素性測試應該是完全可行的。只要確定您使用的是3-arg版本的pow, 'pow(2,p-1,p)=​​= 1' –

回答

1

這裏是我的米勒 - 拉賓總理檢查:

def isPrime(n, k=5): # miller-rabin 
    from random import randint 
    if n < 2: return False 
    for p in [2,3,5,7,11,13,17,19,23,29]: 
     if n % p == 0: return n == p 
    s, d = 0, n-1 
    while d % 2 == 0: 
     s, d = s+1, d/2 
    for i in range(k): 
     x = pow(randint(2, n-1), d, n) 
     if x == 1 or x == n-1: continue 
     for r in range(1, s): 
      x = (x * x) % n 
      if x == 1: return False 
      if x == n-1: break 
     else: return False 
    return True 

如果你想保證黃金(不是可能的素數),這不是很更難安排。有關Pocklington的方法,請參見my blog

+0

你知道你函數的準確率嗎? –

+1

這取決於* k *的值。如果你想減少錯誤的機會,使用更大的* k *。但對於512位數字,* k *就足夠了。如果你擔心錯誤發生的可能性,請使用我的博客中描述的Pocklington方法,該方法可以保證產生質數。 – user448810