Bonjour à tous ,
Suite à mon projet de programmer un logiciel de chiffrement en rsa avec visual basic , j'ai donc programmé avec succès un logiciel qui marche très bien avec des petites clés (j'ai même rajouté une fonction pour crypter paquets par paquets d'octets , sinon la sécurité serait nulle quoique vu la taille ridicule de mes clés )
Je veux donc à présent pouvoir crypter avec des grandes clés et donc des grands modulus ....
Sauf que vb ne permet pas de faire des calcul avec de telles nombres ...
Je dois donc programmer une fonction bigmodulo(byval a as string , byval modulus as string) pour calculer le modulo d'un nombre modulo un très grand nombre sous forme de string .
Auparavant j'ai donc programmer et testé les fonctions suivantes qui servent respectivement à comparer deux nombres (inégalité stricte je crois) et à les soustraire :
puis je voudrais programmer la fonction modulo sous la forme suivante :Code:Function biggerthan(ByVal a As String, ByVal b As String) As Boolean If Mid(a, 1, 1) = "-" Then If Not Mid(b, 1, 1) = "-" Then Return False Exit Function Else End If ElseIf Mid(b, 1, 1) = "-" Then Return True Exit Function End If Dim i As Integer = 0 While Mid(a, 1, 1) = "0" a = Mid(a, 2) End While While Mid(b, 1, 1) = "0" b = Mid(b, 2) End While If a.Length > b.Length Then Return True Exit Function End If If b.Length > a.Length Then Return False Exit Function End If i = 1 Dim superieur = False While i <= a.Length If CInt(Mid(a, i, 1)) < CInt(Mid(b, i, 1)) Then superieur = False Or superieur Else superieur = True Or superieur End If i = i + 1 End While Return superieur End Function Function bigsoustraction(ByVal m As String, ByVal n As String) As String Dim bigger As Boolean = True Dim i As Integer = 1 Dim a As String = m Dim b As String = n While Mid(a, 1, 1) = "0" a = Mid(a, 2) End While While Mid(b, 1, 1) = "0" b = Mid(b, 2) End While If biggerthan(a, b) = True Then bigger = True a = m b = n Else bigger = False a = n b = m End If While Mid(a, 1, 1) = "0" a = Mid(a, 2) End While While Mid(b, 1, 1) = "0" b = Mid(b, 2) End While Dim lena = a.Length Dim lenb = b.Length 'm-n Dim result(lena) As Integer Dim n1 As Integer Dim n2 As Integer Dim retenue As Integer = 0 Dim jeretiens As Boolean = False While i <= lena n1 = CInt(Mid(a, lena - i + 1, 1)) If i > lenb Then n2 = 0 Else n2 = CInt(Mid(b, lenb - i + 1, 1)) End If If jeretiens = False Then If n1 < n2 Then result(i) = 10 + n1 - n2 jeretiens = True retenue = 1 Else result(i) = n1 - n2 jeretiens = False retenue = 0 End If Else n2 = n2 + 1 If n1 < n2 Then result(i) = 10 + n1 - n2 jeretiens = True retenue = 1 Else result(i) = n1 - n2 jeretiens = False retenue = 0 End If End If i = i + 1 End While Dim soustraction As String i = 0 soustraction = "" While i < lena soustraction = soustraction & CStr(result(lena - i)) i = i + 1 End While If bigger = True Then Return soustraction Else soustraction = "-" & soustraction Return soustraction End If End Function
dim expos = "1"
dim scale ="10"
Tant que biigerthan(bigsoustraction(a,b igproduit(modulus,expos)),modu lus) = true ' soit tant que a-expos*modulus >modulus vrai
expos = bigproduit(expos,scale)
Fin
a = bigsoustraction(a,bigproduit(m odulus,expos))
Tant que bigerthan(a,modulus)
a = bigsoustraction(a,modulus)
FIn
Return a
Sauf que ca marche pas vraiment au vu les résultats . Pourtant , étant donné que j'ai testé les fonctions préliminaires avec succès enfin je crois ... et que la dernière fonction n'utilise que des combinaisons linéaires de a et modulus ... Elle devrait me retourner un résultat au moins de la meme classe que a mod modulus ... Mais ce n'est pas le cas
Je sais pas d'où cela vient ca me rend fou !!!!
Auriez vous une idée ou bien un code permettant de calculer modulo un très grand nombre (chaine de caractère)
qui soit efficace ?
Si c'est le cas merci beaucoup
Merci d'avance .
Bonne journée .
-----