Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 29-06-2009 10:06:23
- Golgup
- Membre actif
- Inscription : 09-07-2008
- Messages : 574
[Python] fabrication de clefs rsa
Aller, je vous embête une derniere fois et vous propose ce code de generation de clefs rsa pour les interessés!
from random import*
def teun(s,f=0,t1=[]):
while s!=f:
s-=f
c=int(log(s)/log(2))
f=2**c
t1.append(c)
return t1
a=2
def tdeux(p,a,u=0,z=a,j=a,t2=[a]):
while u!=t1[0]:
z=j**2%p
j=z
u+=1
t2.append(z)
return t2
def tetrois(t3=[],o=-1):
while o<len(t1)-1:
o+=1
t3.append(t2[t1[o]])
return t3
print" *Generateur de clefs RSA*"
print""
print""
b=input('Entrez a taille de la clef en bits:')
print"------------------------------------------------------------------------"
print""
p=1
while p<2**int((b+1)/2):
p=randrange(2**int((b-1)/2),2**int((b+1)/2))
if p%2==0:
p=p+1
s=p-1
t1=teun(s,f=0,t1=[])
t2=tdeux(p,a,u=0,z=a,j=a,t2=[a])
t3=tetrois(t3=[],o=-1)
m=reduce(lambda x, y: x *y, t3)%p
if m==1:
break
q=1
while q<2**int((b+1)/2):
q=randrange(2**int((b-1)/2),2**int((b+1)/2))
if q%2==0:
q=q+1
s=q-1
teun(s,f=0,t1=[])
t1=teun(s,f=0,t1=[])
tdeux(q,a,u=0,z=a,j=a,t2=[a])
t2=tdeux(q,a,u=0,z=a,j=a,t2=[a])
tetrois(t3=[],o=-1)
t3=tetrois(t3=[],o=-1)
m=reduce(lambda x, y: x *y, t3)%q
if m==1:
break
n=p*q
e=2**16+1
phi=(p-1)*(q-1)
def pgcd(a,b):
try:
while b!=0:
a=a%b
b=b%a
return a
except:
return b
def t1_t2(a,b):
try:
while b!=0:
a=a%b
t1.append(a)
t2.append(b/a)
b=b%a
t1.append(b)
t2.append(a/b)
return t2
except:
return t2
def xk(l=1,xk=[1,0,1]):
while l!=len(t1)-2:
l+=1
xk.append(t2[l-1]*xk[len(xk)-1]+xk[len(xk)-2])
return xk
while pgcd(e,phi)!=1:
e+=2
if pgcd(e,phi)==1:
t1,t2=[e,phi],[e/phi]
t2=t1_t2(e,phi)
xk=xk(l=1,xk=[1,0,1])
d=((-1)**(len(t1)-2))*xk[len(xk)-2]
if d<0:
d=d-phi*-1
p='?'
q='?'
phi='?'
print" Clef publique:"
print""
print 'n','=',n
print 'e','=',e
print""
print"------------------------------------------------------------------------"
print""
print" Clef privée:"
print""
print 'd','=',d
print""
print"------------------------------------------------------------------------"
Si vous voulez connaître les 2 composants de n ainsi que phi(n) ou encore vérifier que ed=1 mod phi, supprimez juste ces lignes
q='?'
phi='?'
@+++
Dernière modification par Golgup (20-03-2010 10:11:58)
Hors ligne
#2 30-06-2009 08:51:30
- Golgup
- Membre actif
- Inscription : 09-07-2008
- Messages : 574
Re : [Python] fabrication de clefs rsa
Re,
J'en profite pour dire à Fred que son applet http://www.bibmath.net/crypto/moderne/rsa.php3 donne des exposants de dechiffrement negatif! Le probleme serait vite réglé en conditionnant sa négativité et en y remediant: d=d-(p-1)(q-1)*-1
bye
Hors ligne
Pages : 1







