rsa e basic

Il forum di Base5, dove è possibile postare problemi, quiz, indovinelli, rompicapo, enigmi e quant'altro riguardi la matematica ricreativa e oltre.

Moderatori: Gianfranco, Bruno

Rispondi
Pigreco
Livello 3
Livello 3
Messaggi: 91
Iscritto il: ven mag 27, 2005 1:06 pm
Località: Milano-Sondrio
Contatta:

rsa e basic

Messaggio da Pigreco » gio lug 20, 2006 10:44 pm

Ciao a tutti, ho fatto un programmino in basic che cifra e decifra un codice di cifre utilizzando la cifratura rsa...

l'ho scritto e poi ho iniziato a modificare delle parti per rendere l'esecuzione più veloce... sono riuscito a sistemare tutto tranne l'ultimo passaggio, dove decifra... in effetti quello è il passagio in cui impiega più tempo, avete qualche idea di come snellire quel calcolo?

Codice: Seleziona tutto


INPUT primo_a,primo_b,messaggio
LET  t=TIME

LET  decodifica_d=(primo_a-1)*(primo_b-1)
LET  quadrante_n=primo_a*primo_b
LET  k=1

DO UNTIL n=1
   LET  k=k+1
   LET  m=decodifica_d
   LET  n=k
   DO WHILE m>0
      IF n>m  THEN 
         LET  n=k
         LET  n=m
         LET  m=k
      END IF
      !altro algoritmo per MCD, preso da basecinque
      LET  m=MOD(m,n)
      !LET  m=m-n
   LOOP
    
LOOP
LET  codifica_e=k
LET  code=MOD( (messaggio^codifica_e) , quadrante_n ) 



!LET  x=1
!LET  r=2
!DO UNTIL r=1
!   LET  x=x+1
!   LET  r=MOD( (x*codifica_e) , decodifica_d ) 
!loop
!LET  d_inverso=x

!mio algoritmo: riduce il tempo di questo passaggio 
LET x=1
LET  d=1
DO UNTIL d=0
   LET  d_inverso=(x*decodifica_d+1)/codifica_e
   LET  d=d_inverso-INT(d_inverso)
   LET  x=x+1
loop

LET  codice=code
LET  rr=0
LET  risp=codice
LET  risposta=1
IF MOD( d_inverso , 2 ) = 1 THEN
   LET  risposta=MOD(risposta*risp,quadrante_n)
   LET  d_inverso=d_inverso-1
END IF

!LET  d_inverso=d_inverso-(INT(d_inverso/decodifica_d)*decodifica_d)
PRINT d_inverso,decodifica_d
DO UNTIL rr=d_inverso
   LET  rr=rr+2
   LET  risposta=MOD(risposta*risp*risp,quadrante_n)
LOOP



LET  tempo=TIME - t
IF tempo=0 THEN
   LET  efficenza=-1
END IF
IF tempo>0 THEN
   LET  efficenza=(tempo*100)/quadrante_n
End if
PRINT "codice:"
PRINT code
PRINT "decodifica:"
PRINT risposta
PRINT "totale dati"
PRINT quadrante_n
PRINT "tempo totale(s)"
PRINT tempo
PRINT "efficenza: (tempo su 100 dati)"
PRINT efficenza
END

PS le parti commentate sono quelle vecchie che sono state migliorate
Pi greco

Rispondi