Questo topic e' stato chiuso dal moderatore.
04/07/09 20:09
itAndy90
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:
La funzione MCD serve per il calcolo del massimo comun divisore, utile per vedere se due numeri sono coprimi tra loro. Grazie in anticipo a tutti per le eventuali risposte
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:
Public Class Form1 Function MCD(ByVal a As Integer, ByVal b As Integer) As Integer Dim m As Double If b = 0 Then Return a Else Do m = a Mod b a = b b = m Loop Until b = 0 Return a End Function Private Sub calcola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcola.Click Dim ncas As Single Dim p, q As Integer Dim vtprimi(9), n, pvt, z As Integer Dim pub As Single vtprimi(0) = 29 vtprimi(1) = 31 vtprimi(2) = 37 vtprimi(3) = 41 vtprimi(4) = 43 vtprimi(5) = 47 vtprimi(6) = 53 vtprimi(7) = 59 vtprimi(8) = 61 vtprimi(9) = 67 Randomize() ncas = Rnd() Select Case 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) End Select form_p.Text = p ncas = Rnd() Select Case 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) End Select form_q.Text = q n = p * q form_n.Text = n z = (p - 1) * (q - 1) pvt = 2 Do While (MCD(z, pvt) <> 1) pvt = pvt + 1 Loop form_pvtexp.Text = pvt pub = 1 Do While ((pub * pvt) Mod z) <> 1 pub = pub + 1 Loop form_pubexp.Text = pub End Sub End Class
La funzione MCD serve per il calcolo del massimo comun divisore, utile per vedere se due numeri sono coprimi tra loro. Grazie in anticipo a tutti per le eventuali risposte
Ultima modifica effettuata da itAndy90 06/07/09 14:08
aaa