He escrito código para generar claves públicas y privadas. Funciona muy bien en Python 3.7 pero falla en Python 3.8. No sé cómo falla en la última versión. Ayúdame con algunas soluciones.
Aquí está el código:
from Crypto.PublicKey import RSA
def generate_keys():
modulus_length = 1024
key = RSA.generate(modulus_length)
pub_key = key.publickey()
private_key = key.exportKey()
public_key = pub_key.exportKey()
return private_key, public_key
a = generate_keys()
print(a)
Error en la versión Python 3.8:
Traceback (most recent call last):
File "temp.py", line 18, in <module>
a = generate_keys()
File "temp.py", line 8, in generate_keys
key = RSA.generate(modulus_length)
File "/home/paulsteven/.local/lib/python3.8/site-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 "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/PublicKey/_RSA.py", line 50, in generate_py
p = pubkey.getStrongPrime(bits>>1, obj.e, 1e-12, randfunc)
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Util/number.py", line 282, in getStrongPrime
X = getRandomRange (lower_bound, upper_bound, randfunc)
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Util/number.py", line 123, in getRandomRange
value = getRandomInteger(bits, randfunc)
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Util/number.py", line 104, in getRandomInteger
S = randfunc(N>>3)
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 202, in read
return self._singleton.read(bytes)
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 178, in read
return _UserFriendlyRNG.read(self, bytes)
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 129, in read
self._ec.collect()
File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 77, in collect
t = time.clock()
AttributeError: module 'time' has no attribute 'clock'
python
attributeerror
pycrypto
python-3.8
Smack Alpha
fuente
fuente
Respuestas:
Del documento de Python 3.8 :
fuente
El módulo que utiliza para generar una llamada clave es un método que se ha depreciado desde python 3.3 time.clock () .
Puede cambiar a Python 3.7 o cambiar el código fuente para reemplazarlo. Deberías abrir un problema para eso también.
fuente
Está en desuso como se dijo, lo que significa que solo debe usar las últimas versiones de las bibliotecas que tienen ese módulo. Por ejemplo, dependiendo de la dependencia que tenga, Eliminar e Instalar
La idea es que no tiene que degradar su versión de Python, ya que esto lo alcanzará más tarde. Simplemente actualice los paquetes a los más tardíos que sean compatibles con Python 3.8
fuente