|
|
|
| [Python] Créer paire de clé Rsa par kilian |
samedi 2 avril 2005 à 15:07:19 |
class keygen: def __init__(self,len_premiers,premiers): # premiers est une liste de nombres premiers ref_p=random.choice(range(0,len_premiers)) ref_q=random.choice(range(0,len_premiers)) p=premiers[ref_p] q=premiers[ref_q] self.n=p*q test=(p-1)*(q-1) self.e=test #Cette valeur permettra de lancer la boucle en dessous pour trouver la vraie valeur de e while (test%self.e==0): self.e=random.choice(range(0,test)) self.d=0.3333 #Idem, cette valeur sert à lancer la boucle en dessous pour trouver d, c'est pas très élégant mais j'ai pas trouvé mieux while (self.d)==0.3333 or (self.e*self.d)%test!=1: self.d=random.choice(range(len(premiers),1000)) # Et voilà c'est ici que ça coince je crois, ça rend le code très lent
Configuration: Debian/Python 2.3
Aaah ça y est j'ai trouvé.
Finalement, j'ai plutôt vérifié tous les nombres (dans une certaine portion d'entiers) qui vérifient: self.e*x%test==1où x sont les entiers à vérifier. Puis j'ai posé une boucle au cas ou cette expression ne marcherais pas avec la valeur la valeur de e dans une certaine plage de x. Ca donne: class keygen: def __init__(self,len_premiers,premiers): ref_p=random.choice(range(0,len_premiers)) ref_q=random.choice(range(0,len_premiers)) p=premiers[ref_p] q=premiers[ref_q] self.n=p*q self.d=0 while not self.d: test=(p-1)*(q-1) self.e=test while (test%self.e==0): self.e=random.choice(range(2,test)) liste=range(len(premiers),len(premiers)+1000) liste_d=[] for nb in liste: if ((self.e*nb)%test==1): liste_d.append(nb) try: self.d=random.choice(liste_d) except: pass Bon ça génère bien trois nombres, maintenant à savoir si ça génère des clés rsa valides, rien n'est moins sûr :-) |
Il existe une librairie C qui convient parfaitement pour s'amuser avec RSA: gmp.h (http://www.swox.com/gmp/)
Elle permet notament de - travailler avec des nombre de tres grande taille (512, 1024, 2048 bits...) - trouver facilement des nombres premiers (p et q) - generer des nombres aleatoires (e) - faire une inversion avec modulo (d) - calculer une puissance avec modulo (encryption/decryption RSA) Avec cette librairie, la generation des cles devient simplissime...
|
Il existe la lib pyCrypto et ezPyCrypto qui l'interface de maniere plus pythonique. |
| 30/03 15h01 | [Python]Création de listes | Programmation | 30/03 16h52 | 9 |
| 05/03 18h17 | Comment créer des clés de registres manquante | Internet | 05/03 18h17 | 0 |
| 27/02 05h44 | creation de cles public et privé | Virus/Sécurité | 27/02 10h25 | 4 |
| 19/02 10h24 | Comment créer des clé d'activations | Programmation | 19/02 10h24 | 0 |