Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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 math import log
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

p='?'
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

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
trente quatre plus seize
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums