【问题标题】:Generate large(512 bit+) prime number python 3.6生成大(512位+)素数python 3.6
【发布时间】:2017-08-29 13:18:12
【问题描述】:

在过去的一周半里,我一直在尝试使用 Python 为 RSA 加密生成大质数,但没有成功。费马素性检验在 512 位的尺度上是不可行的,我不能完全理解 Miller-Rabin。 (我 13 岁)所有在线脚本似乎都适用于我正在使用的 Python 版本以下。我应该怎么做才能产生大量素数? (是的,概率素数很好。)

【问题讨论】:

  • 对于您感兴趣的大小的数字,fermat 素性测试应该是完全可行的。只要确保您使用 3-arg 版本的 pow,例如pow(2, p-1, p) == 1

标签: rsa primes python-3.6


【解决方案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

如果你想要一个保证的素数(不是一个可能的素数),那么安排起来并不难。请参阅 my blog 了解 Pocklington 提供的方法。

【讨论】:

  • 你知道你的函数的准确率吗?
  • 取决于k的值。如果您想减少出错的机会,请使用更大的 k。但对于 512 位数字,k 就足够了。如果您担心出错的可能性,请使用我的博客中描述的 Pocklington 方法,它可以保证产生素数。
  • 我们必须区分使用概率方法测试素数、证明素数的任意数和生成给定长度的已证明素数。
猜你喜欢
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多