在 Python 3 RSA 中创建私钥时出错
Error with creating Private Key in Python 3 RSA
我正在尝试在 Python 中创建一个随机 RSA 私钥,但我收到一条错误消息,我不知道该怎么做。
我现在使用的代码来自 this 我之前创建的线程,但我不会工作。
代码:
from Crypto import Random
from Crypto.PublicKey import RSA
def random_generator():
return Random.new().read(32)
private_key = RSA.generate(1024, random_generator)
print(str(private_key))
错误信息:
Traceback (most recent call last):
File "/home/simon/Python/Projects/FileServer/encrypt.py", line 7, in <module>
private_key = RSA.generate(1024, random_generator)
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 508, in generate
obj = _RSA.generate_py(bits, rf, progress_func, e) # TODO: Don't use legacy _RSA module
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/_RSA.py", line 50, in generate_py
p = pubkey.getStrongPrime(bits>>1, obj.e, 1e-12, randfunc)
File "/usr/lib/python3/dist-packages/Crypto/Util/number.py", line 265, in getStrongPrime
randfunc)
TypeError: random_generator() takes 0 positional arguments but 1 was given
generate(bits, randfunc=None, progress_func=None, e=65537)
Parameters:
...
randfunc
(callable) - Random number generation function; it should accept a single integer N and return a string of random data N bytes long. If not specified, a new one will be instantiated from Crypto.Random.
您的 random_generator()
没有任何参数。它应该有一个参数——到 return 的字节数。实现也很糟糕——你每次都在创建一个新实例,这可能会严重削弱它生成的数字的随机性。
但是由于您只是使用 Crypto.Random
实例,因此您根本不需要指定此参数 - 只需将其保留即可。
from Crypto.PublicKey import RSA
private_key = RSA.generate(1024)
print(str(private_key))
如果您坚持提供自己的 randfunc,请将其传递给 Crypto.Random
实例的绑定 read
方法:
from Crypto import Random
from Crypto.PublicKey import RSA
r = Random.new()
private_key = RSA.generate(1024, r.read)
print(str(private_key))
我正在尝试在 Python 中创建一个随机 RSA 私钥,但我收到一条错误消息,我不知道该怎么做。 我现在使用的代码来自 this 我之前创建的线程,但我不会工作。
代码:
from Crypto import Random
from Crypto.PublicKey import RSA
def random_generator():
return Random.new().read(32)
private_key = RSA.generate(1024, random_generator)
print(str(private_key))
错误信息:
Traceback (most recent call last):
File "/home/simon/Python/Projects/FileServer/encrypt.py", line 7, in <module>
private_key = RSA.generate(1024, random_generator)
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 508, in generate
obj = _RSA.generate_py(bits, rf, progress_func, e) # TODO: Don't use legacy _RSA module
File "/usr/lib/python3/dist-packages/Crypto/PublicKey/_RSA.py", line 50, in generate_py
p = pubkey.getStrongPrime(bits>>1, obj.e, 1e-12, randfunc)
File "/usr/lib/python3/dist-packages/Crypto/Util/number.py", line 265, in getStrongPrime
randfunc)
TypeError: random_generator() takes 0 positional arguments but 1 was given
generate(bits, randfunc=None, progress_func=None, e=65537)
Parameters:
...
randfunc
(callable) - Random number generation function; it should accept a single integer N and return a string of random data N bytes long. If not specified, a new one will be instantiated from Crypto.Random.
您的 random_generator()
没有任何参数。它应该有一个参数——到 return 的字节数。实现也很糟糕——你每次都在创建一个新实例,这可能会严重削弱它生成的数字的随机性。
但是由于您只是使用 Crypto.Random
实例,因此您根本不需要指定此参数 - 只需将其保留即可。
from Crypto.PublicKey import RSA
private_key = RSA.generate(1024)
print(str(private_key))
如果您坚持提供自己的 randfunc,请将其传递给 Crypto.Random
实例的绑定 read
方法:
from Crypto import Random
from Crypto.PublicKey import RSA
r = Random.new()
private_key = RSA.generate(1024, r.read)
print(str(private_key))