在PyCrypto中,我想使用树莓派上的硬件随机数生成器创建一个RSA密钥。我已经可以访问 Pis hrng 中的数据,但我不知道如何使用/将该数据提供给创建 RSA 密钥的 PyCrypto 函数,RSA.generate()
.
来自 PyCrypto 的关于生成函数的文档似乎表明我需要传递一个函数,该函数将返回一个随机数而不是随机数本身。有谁知道我如何使用我捕获的硬件随机数在 python 中创建 RSA 密钥,更具体地说是使用 PyCrypto。下面是我玩过的一些示例代码。
这将生成一个 RSA 密钥,但不使用真正的随机数来执行此操作:
#/usr/bin/python
from Crypto.PublicKey import RSA
from Crypto import Random
random_generator = Random.new().read
key = RSA.generate(1024, random_generator)
print 'Random_generate', random_generator
print 'key: ', key
这就是我想要的,但generate()
中的randomStream
变量是生成函数的错误用法。
#/usr/bin/python
from Crypto.PublicKey import RSA
from Crypto import Random
hwrngFile = open('/dev/hwrng', 'r')
randomStream = hwrngFile.read(512)
hwrngFile.close()
key = RSA.generate(4096, randomStream)
print key
通过hwrngFile.read
.在生成密钥之前,请勿关闭hwrngFile
。
文档说:
randfunc (callable) - 随机数生成函数;它应该 接受单个整数 N 并返回一串随机数据 N 字节 长。
因此,hwrngFile.read
是一个函数,它接受一个整数,它返回该字节数。伟大。
您的代码应如下所示:
with open('/dev/hwrng', 'r') as hwrgnFile:
key = RSA.generate(4096, hwrngFile.read)