我应该在带有PyCrypto 2.0.1的RSA.generate()中使用randfunc吗?

问题描述 投票:2回答:2

我正在尝试在PyCrypto的2.0.1和2.6.1版本中生成RSA密钥。

[当我为RSA.generate指定单个参数时–位数,例如4096 –例如下面的代码,在2.6.1版中一切正常:

from Crypto.PublicKey import RSA
keys = RSA.generate(4096)

但是当我使用PyCrypto 2.0.1版运行它时​​,出现以下错误:

TypeError: generate_c() takes at least 2 arguments (1 given)

我知道新的API具有randfunc=None,这就是它在2.6.1中起作用的原因。

我的问题是我不知道2.0.1中可接受的randfunc。我应该使用什么?

python pycrypto
2个回答
1
投票

您应使用os.urandom。

PyCrypto documentation报价:

randfunc(可调用)-随机数生成函数; 它应该接受单个整数N并返回N个字节长的随机数据字符串]。如果未指定,将从Crypto.Random实例化一个新对象。

然后有一个“注意”部分:

您应始终使用加密安全的随机数生成器,例如Crypto.Random模块中定义的生成器;不只是使用当前时间和随机模块。

PyCrypto 2.0.1中没有Crypto.Random模块,因此您不能在此处使用此方法。相反,您应该使用os.urandom()。引用文档(重点是我的):

返回适合加密使用的n个随机字节的字符串。

此函数从特定于操作系统的随机性源返回随机字节。 返回的数据对于加密应用程序来说应该是不可预测的,尽管其确切质量取决于操作系统的实现。在类似UNIX的系统上,它将查询/ dev / urandom,在Windows上它将使用CryptGenRandom()。如果找不到随机源,则将引发NotImplementedError。

在我看来,这是对randfunc的适当选择。


0
投票

我知道该线程确实很旧,但是我在ElGamal中尝试了相同的操作,但出现了错误:

os.urandom()

我的行是:'bytes' object is not callable

© www.soinside.com 2019 - 2024. All rights reserved.