J'ai écrit du code pour générer des clés publiques et privées. Cela fonctionne très bien dans Python 3.7 mais il échoue dans Python 3.8. Je ne sais pas comment cela échoue dans la dernière version. Aidez-moi avec quelques solutions.
Voici le code:
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)
Erreur dans la version 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
la source
la source
Réponses:
Depuis le document Python 3.8 :
la source
Le module que vous utilisez pour générer des clés appelle une méthode qui s'est dépréciée depuis python 3.3 time.clock () .
Vous pouvez rétrograder vers python 3.7 ou modifier le code source pour le remplacer. Vous devriez également ouvrir un problème pour cela.
la source
Il est déconseillé comme indiqué, ce qui signifie qu'il suffit d'utiliser les dernières versions des bibliothèques qui ont ce module. Par exemple, selon la dépendance dont vous disposez, Supprimer et installer
L'idée est que vous n'avez pas à rétrograder votre version de python car cela vous rattrapera plus tard. Mettez simplement à jour les packages vers des versions plus tardives compatibles avec Python 3.8
la source