【问题标题】:Generating Large Prime Numbers with Py Crypto使用 Py Crypto 生成大素数
【发布时间】:2016-05-11 22:21:41
【问题描述】:

我正在尝试使用 python 中的加密库生成一个大素数(2048 位)以实现 RSA。但是,我不太了解getPrime() 函数的语法。我目前有:

from Crypto.Util import number

n_length = 2048

primeNum = number.getPrime(n_length, randFunc)

我不明白randFuncgetPrime 函数中应该是什么。

【问题讨论】:

  • 这是一个关于python的问题;也许堆栈交换会是一个更好的地方?
  • 我认为这个问题是题外话,因为软件相关。 randFunc 是一个输出随机字节的函数。来自 API 文档 (dlitz.net/software/pycrypto/api/current/…): getPrime(N, randfunc=None) getPrime(N:int, randfunc:callable):long 返回一个随机的 N 位素数。如果省略 randfunc,则使用 Random.new().read。
  • 您可能还想尝试实现自己的大素数函数。费马素数检验很容易实现。
  • 该库是否提供可证明的素数,或者,与用于大素数生成的软件一样,仅提供基于例如统计上高度可能的素数。米勒-拉宾测试?在第二种情况下,您可以考虑改用可证明的素数。我有一个 Python 代码实现 Maurer 的可证明素数生成算法,其效率与使用 Miller-Rabin 相当。见s13.zetaboards.com/Crypto/topic/7234475/1
  • 一种方法是使用 RSA 库。您可以致电from Crypto.PublicKey import RSA。然后创建对象keyA = RSA.generate(2048)。最后,你使用keyA.p;keyA.q

标签: python random primes pycrypto


【解决方案1】:

n_length 是质数的“大小”。它将返回一个大约 2^n_length 的数字。 randFunc 是一个可调用函数,它接受单个参数 N,然后返回 N 个随机字节的字符串。 (os.urandom 就是一个例子)。在大多数情况下,randFunc 可以(并且应该)被省略,因为默认是 PyCrypto 自己的随机数生成器。

【讨论】:

  • 我试图省略其中的 randFunc 部分,但我收到一条错误消息,指出该函数只需要 2 个参数,而只给出了 1 个参数。这是我尝试这条线的时候: primeNum = number.getPrime(n_length)
  • >>> number.getPrime(16) # 33037L 你有最新版本的 python 和 pycrypto 吗?如果您仍然遇到问题,请尝试此操作。 import os; number.getPrime(nbits, os.urandom)
  • 是的。我意识到我的 pypcrypto 不是最新的,所以我需要添加 os.urandom。谢谢!
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 2010-11-11
  • 2015-02-09
相关资源
最近更新 更多