Il existe d'excellentes classes pour la crypto en .NET. A mon avis, transposer ca en C n'est pas plus compliqué que de le débugguer en VB.NET.
-----
Il existe d'excellentes classes pour la crypto en .NET. A mon avis, transposer ca en C n'est pas plus compliqué que de le débugguer en VB.NET.
Bonjour ,
toujours sur mon projet ...
La dernière fois j'avais dit qu'il marchait ...
Mais j'avais tort : je rectifie : il ne marche que pour des clés petites ...
Au dessus d'une certaine taille , j'ai l'impression que l'ordinateur fais des erreurs de calcul ou n'affiche pas le bon résultat parcequ'au moment de décrypter il me calcule des octets plus grands que 256...(ma clé est pourtant valide d est bien l'inverse modulaire de e dans Z/phi(n)Z , phi(n) est bien calculé ...).
J'ai donc rajouté des fonctions "addition grand nombre" ,"multiplication grand nombre" qui prennent des chaines représentant des grands nombres en entrée et donnent le résultat en string .
Elles marchent très bien pour des petits nombres là encore , mais quand je les utilise (notamment l'addition) pour des grandes chaines du style "74444444444444444444444444444 444444444444444444444444444444 44444444" , au moment d'éxecuter il ya une erreur : "impossible de convertir + en integer" .
Et là je regarde les valeurs des variables :
a qui n'est autre que la chaine précédente , à la valeur "7E+44" alors que la fonction utilise a en tant que chaine sans passer par un type numérique si ce n'est au moment d'additionner chiffre par chiffre ...
J'ai l'impression que visual studio me cache quelquechose ...
Avez vous une idée ?
Merci d'avance
Voici le code des functions :
Merci d'avance bonne journéeCode:Function bigaddition(ByVal m As String, ByVal n As String) Dim i As Integer = 0 Dim a Dim b Dim atemp Dim btemp Dim result As String = "" Dim n1, n2 Dim retenue = 0 Dim add If m.Length > n.Length Then a = m b = n Else a = n b = m End If Dim lena = a.Length Dim lenb = b.Length While i < lena n1 = Mid(a, lena - i, 1) If i < lenb Then n2 = Mid(b, lenb - i, 1) Else n2 = 0 End If add = retenue + CInt(n1) + CInt(n2) result = CStr(add Mod 10) & result If add > 9 Then retenue = 1 Else retenue = 0 End If i = i + 1 End While If add > 9 Then result = "1" & result End If Return result End Function Function multichifrre(ByVal nombre As String, ByVal chiffre As Integer) Dim nombre2 = CStr(nombre) Dim nombretemp Dim result As String = "" Dim retenue = 0 Dim mult Dim multstr Dim len = nombre2.Length Dim i As Integer = 0 While i < len len = nombre2.Length nombretemp = Val(Mid(nombre2, len - i, 1)) mult = nombretemp * chiffre + retenue multstr = CStr(mult) result = Mid(multstr, multstr.length) & result retenue = (mult - (mult Mod 10)) / 10 i = i + 1 End While If retenue <> 0 Then result = retenue & result End If Return result End Function Function bigproduit(ByVal a As String, ByVal b As String, Optional ByVal modulus As Double = 0) Dim i = 0 Dim btemp As Integer Dim mult Dim result As String() Dim bstr As String = CStr(b) Dim lenb = bstr.Length Dim resultat As String = "" Dim j = 0 While i < lenb btemp = Val(Mid(bstr, lenb - i, 1)) ReDim result(i) result(i) = multichifrre(a, btemp) For j = 1 To i result(i) = result(i) & "0" Next resultat = bigaddition(resultat, Val(result(i))) i = i + 1 End While If modulus = 0 Then Return resultat Else Return (resultat Mod modulus) End If End Function
non j'ai rien dit : j'avais programmer avec des double comme arguments ... en modifiant pour passer à des string , j'ai oublié d'enlever le "val(result(i))" dans la dernière fonction .