Napisałem kod do generowania kluczy publicznych i prywatnych. Działa świetnie w Pythonie 3.7, ale nie działa w Pythonie 3.8. Nie wiem, jak zawodzi w najnowszej wersji. Pomóż mi z niektórymi rozwiązaniami.
Oto kod:
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)
Błąd w wersji 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
źródło
źródło
Odpowiedzi:
Z dokumentu Python 3.8 :
źródło
Moduł używany do generowania klucza wywołuje metodę, która jest nieaktualna od czasu Python 3.3 time.clock () .
Możesz zmienić wersję na Python 3.7 lub zmienić kod źródłowy, aby go zastąpić. Powinieneś również otworzyć problem z tym związany.
źródło
Jest to przestarzałe, jak powiedziano, co oznacza po prostu użyj najnowszych wersji bibliotek, które mają ten moduł. Na przykład w zależności od zależności, którą masz, Usuń i zainstaluj
Chodzi o to, że nie musisz obniżać wersji Pythona, ponieważ to cię później dogoni. Po prostu zaktualizuj pakiety do nowszych, zgodnych z Python 3.8
źródło