AttributeError: Das Modul 'time' hat in Python 3.8 kein Attribut 'clock'

23

Ich habe Code geschrieben, um öffentliche und private Schlüssel zu generieren. Es funktioniert gut in Python 3.7, aber es schlägt in Python 3.8 fehl. Ich weiß nicht, wie es in der neuesten Version fehlschlägt. Helfen Sie mir mit einigen Lösungen.

Hier ist der 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)

Fehler in Python 3.8 Version:

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'
Smack Alpha
quelle
Hier in der Crytpo lib verwiesen: github.com/dlitz/pycrypto/issues/283 Das Ticket scheint jedoch seit einem Jahr nicht mehr geschlossen zu sein.
Fabien Antoine

Antworten:

22

Aus dem Python 3.8-Dokument :

Die Funktion time.clock()wurde entfernt, nachdem sie seit Python 3.3 veraltet war: Verwenden Sie stattdessen time.perf_counter()oder time.process_time(), abhängig von Ihren Anforderungen, ein genau definiertes Verhalten. (Beitrag von Matthias Bussonnier in bpo-36895 .)

Angus Tay
quelle
1

Das Modul, mit dem Sie den Schlüssel generieren, ruft eine Methode auf, die seit Python 3.3 time.clock () abgeschrieben wurde .

Sie können ein Downgrade auf Python 3.7 durchführen oder den Quellcode ändern, um ihn zu ersetzen. Sie sollten auch dafür ein Problem eröffnen.

Florian Bernard
quelle
0
AttributeError: module 'time' has no attribute 'clock' 

Es ist wie gesagt veraltet, was bedeutet, dass Sie nur die neuesten Versionen von Bibliotheken verwenden, die dieses Modul haben. Abhängig von der Abhängigkeit, die Sie haben, entfernen und installieren

Crypto == 1.4.1 oder Mako == 1.1.2 oder SQLAlchemy == 1.3.6 // etc.

Die Idee ist, dass Sie Ihre Python-Version nicht herunterstufen müssen, da dies Sie später einholen wird. Aktualisieren Sie einfach die Pakete auf spätere, die mit Python 3.8 kompatibel sind

Joash
quelle