在过去一周半的时间里,我一直在尝试使用Python生成用于RSA加密的大质数,但没有运气。费马素性测试在512位的尺度下是不可行的,我不能完全围绕米勒 - 拉宾。 (我13)所有在线脚本似乎都可以使用我正在使用的Python版本。我应该怎么做才能产生大量素数? (是的,概率素数很好。)
答案 0 :(得分:1)
这是我的Miller-Rabin主要检查员:
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。