Ciao a tutti
volevo portare per l'orale della maturità un piccolo software che elaborasse le chiavi pubbliche e private dell'algoritmo RSA... Purtroppo questo periodo sto studiando come un mulo e, complice lo stress, a ste cose non riesco a stargli appresso più di tanto. Potreste darmi una mano per favore?
Il codice che segue non da errori in compilazione, funziona per un paio di elaborazioni e poi va in crash. Premetto che, eliminando l'ultima parte (quella del calcolo dell'esponente pubblico) il programma va in run senza problemi e non crasha. Mi è successo un paio di volte che crashasse anche al primo colpo, ma onestamente non ne capisco la ragione. Confido in voi 
Se vi può aiutare: ncas è una variabile per un numero random per l'assegnazione dei due numeri primi (np1, np2) da un vettore preconfezionato per lo scopo con 10 numeri primi. Pvt è l'esponente privato, pub quello pubblico.
Codice PHP:
Private Sub calcola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcola.Click
Dim ncas As Single
Dim np1, np2 As Integer
Dim vtprimi(0, 9), modulo, app As Integer
Dim pvt, pub As Double
vtprimi(0, 0) = 113
vtprimi(0, 1) = 193
vtprimi(0, 2) = 251
vtprimi(0, 3) = 269
vtprimi(0, 4) = 311
vtprimi(0, 5) = 313
vtprimi(0, 6) = 337
vtprimi(0, 7) = 421
vtprimi(0, 8) = 433
vtprimi(0, 9) = 541
Randomize()
ncas = Rnd()
Select Case Val(ncas)
Case 0 To 0.099999999
np1 = vtprimi(0, 0)
Case 0.1 To 0.199999999
np1 = vtprimi(0, 1)
Case 0.2 To 0.299999999
np1 = vtprimi(0, 2)
Case 0.3 To 0.399999999
np1 = vtprimi(0, 3)
Case 0.4 To 0.499999999
np1 = vtprimi(0, 4)
Case 0.5 To 0.599999999
np1 = vtprimi(0, 5)
Case 0.6 To 0.699999999
np1 = vtprimi(0, 6)
Case 0.7 To 0.799999999
np1 = vtprimi(0, 7)
Case 0.8 To 0.899999999
np1 = vtprimi(0, 8)
Case 0.9 To 1
np1 = vtprimi(0, 9)
End Select
form_np1.Text = np1
ncas = Rnd()
Select Case Val(ncas)
Case 0 To 0.099999999
np2 = vtprimi(0, 0)
Case 0.1 To 0.199999999
np2 = vtprimi(0, 1)
Case 0.2 To 0.299999999
np2 = vtprimi(0, 2)
Case 0.3 To 0.399999999
np2 = vtprimi(0, 3)
Case 0.4 To 0.499999999
np2 = vtprimi(0, 4)
Case 0.5 To 0.599999999
np2 = vtprimi(0, 5)
Case 0.6 To 0.699999999
np2 = vtprimi(0, 6)
Case 0.7 To 0.799999999
np2 = vtprimi(0, 7)
Case 0.8 To 0.899999999
np2 = vtprimi(0, 8)
Case 0.9 To 1
np2 = vtprimi(0, 9)
End Select
form_np2.Text = np2
modulo = np1 * np2
form_modulo.Text = modulo
pvt = (np1 - 1) * (np2 - 1)
app = pvt
REM Calcolo esponente privato (pvt), coprimo e più piccolo di (np1 - 1)(np2 - 1)
Do While ((MCD(pvt, modulo) <> 1))
pvt = pvt - 0.01
Loop
form_pvt.Text = pvt
REM Calcolo esponente pubblico (pub), tale che (pvt * pub) mod (np1 - 1)(np2 - 1) = 1
pub = 0.1
Do While (((pub * pvt) Mod app) <> 1)
pub = pub + 0.1
Loop
form_pub.Text = pub
End Sub
Grazie a tutti in anticipo per il vostro aiuto.