Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti
avendo portato nella tesina un'analisi dell'algoritmo RSA, volevo affiancargli un software in VB che calcolasse gli esponenti pubblici e privati. Una cosa molto semplice eh, se pensate che sceglie i numeri primi tra soli 10 e per di più molto piccoli...
Il problema si presenta durante il calcolo dell'ultimo esponente: se faccio partire il calcolo degli esponenti con quella parte di codice "attiva", il programma va in crash e non risponde (i test sono fatti con il debug, e cosa strana NON MI SEGNALA PROBLEMI ). Se levo la parte relativa all'ultimo esponente, il programma va in run senza presentare problemi, calcolando quindi l'unico esponente che gli viene richiesto. Spero mi possiate dare una mano, perchè ci terrei a portarlo =). Ecco il codice:
Codice sorgente - presumibilmente VB.NET
PublicClass Form1
Function MCD(ByVal a AsInteger, ByVal b AsInteger)AsInteger
Dim m AsDouble
If b = 0 ThenReturn a Else
Do
m = a Mod b
a = b
b = m
Loop Until b = 0
Return a
EndFunction
PrivateSub calcola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles calcola.Click
Dim ncas As Single
Dim p, q AsInteger
Dim vtprimi(9), n, pub, pvt, z AsInteger
vtprimi(0)= 113
vtprimi(1)= 193
vtprimi(2)= 251
vtprimi(3)= 269
vtprimi(4)= 311
vtprimi(5)= 313
vtprimi(6)= 337
vtprimi(7)= 421
vtprimi(8)= 433
vtprimi(9)= 541
Randomize()
ncas =Rnd()
SelectCase ncas
Case 0 To 0.099999999
p = vtprimi(0)
Case 0.1 To 0.199999999
p = vtprimi(1)
Case 0.2 To 0.299999999
p = vtprimi(2)
Case 0.3 To 0.399999999
p = vtprimi(3)
Case 0.4 To 0.499999999
p = vtprimi(4)
Case 0.5 To 0.599999999
p = vtprimi(5)
Case 0.6 To 0.699999999
p = vtprimi(6)
Case 0.7 To 0.799999999
p = vtprimi(7)
Case 0.8 To 0.899999999
p = vtprimi(8)
Case 0.9 To 1
p = vtprimi(9)
EndSelect
form_p.Text= p
ncas =Rnd()
SelectCase ncas
Case 0 To 0.099999999
q = vtprimi(0)
Case 0.1 To 0.199999999
q = vtprimi(1)
Case 0.2 To 0.299999999
q = vtprimi(2)
Case 0.3 To 0.399999999
q = vtprimi(3)
Case 0.4 To 0.499999999
q = vtprimi(4)
Case 0.5 To 0.599999999
q = vtprimi(5)
Case 0.6 To 0.699999999
q = vtprimi(6)
Case 0.7 To 0.799999999
q = vtprimi(7)
Case 0.8 To 0.899999999
q = vtprimi(8)
Case 0.9 To 1
q = vtprimi(9)
EndSelect
form_q.Text= q
n = p * q
form_n.Text= n
z =(p - 1)*(q - 1)
pub = z
DoWhile(MCD(z, pub) <> 1)
pub = pub - 1
Loop
form_pvtexp.Text= pub
pub = 1
DoWhile((pub * pvt)Mod z) <> 1
pub = pub + 1
Loop
form_pubexp.Text= pub
EndSub
EndClass
MCD è inutile che ve lo sto a dire, calcola il massimo comun divisore. Grazie in anticipo per i vostri suggerimenti