J'utilise PyCryptodome libray pour mes tâches de cryptographie. Je souhaite générer une clé RSA comme indiqué dans l'exemple de .

J'ai tapé ce code:

from Cryptodome.PublicKey import RSA
key = RSA.generate(2048)

Et il faut une éternité pour s'exécuter. (En tapant cette question, elle a déjà passé 10 minutes et elle n'est toujours pas terminée).

Je l'exécute dans Jupyter Notebook sous Windows 10. Savez-vous peut-être pourquoi est-il si lent ou comment le faire fonctionner? J'ai lu la documentation et essayé de trouver des questions similaires mais sans succès.

0
i_rezic 23 mai 2018 à 02:44

3 réponses

Meilleure réponse

J'ai réinstallé Anaconda vers la dernière version et cette fois j'ai installé pycryptodomex via pip (comme indiqué sur github), auparavant je l'ai installé via le cloud Anaconda (je pense que cela n'a pas d'importance, mais laissez-le rester ici, juste pour être sûr )

0
i_rezic 23 mai 2018 à 20:56

Il semble qu'il y ait un bogue dans pycryptodome. Le test de primalité miller_rabin_test appelle is_even sur l'entier candidat qui renvoie toujours à tort vrai, conduisant à une boucle sans fin. J'ai remplacé la ligne 579 dans site-packages / Cryptodome / Math / _Numbers_gmp.py par

def is_even(self):
    return (int(self) & 1)==0        
    #return _gmp.mpz_tstbit(self._mpz_p, 0) == 0 #Old non-functional line of code.

Testé et fonctionne ici.

1
Ove 13 juin 2018 à 12:53

Cela me prend moins d'une seconde (en moyenne) sur un ordinateur portable moyen avec Windows 7 64 bits.

Êtes-vous sûr d'utiliser la version la plus récente du package pycryptodomex (3.6.1)?

Dans les versions précédentes, vous deviez installer une bibliothèque numérique optimisée (MPIR) distincte pour obtenir des performances décentes: l'alternative était purement basée sur Python, et elle était en effet très lente.

0
SquareRootOfTwentyThree 23 mai 2018 à 19:08