Crypter en rsa

Soyez le premier à donner votre avis sur cette source.

Vue 11 895 fois - Téléchargée 812 fois

Description

voilà un module de cryptage RSA ...

Source / Exemple :


Public key(1 To 3) As Long
Private Const base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

Public Sub GenKey()
Dim d As Long, phi As Long, e As Long
Dim m As Long, x As Long, q As Long
Dim p As Long
Randomize
On Error GoTo top
top:
p = Rnd * 1000 \ 1
If IsPrime(p) = False Then GoTo top
Sel_q:
q = Rnd * 1000 \ 1
If IsPrime(q) = False Then GoTo Sel_q
n = p * q \ 1
phi = (p - 1) * (q - 1) \ 1
d = Rnd * n \ 1
If d = 0 Or n = 0 Or d = 1 Then GoTo top
e = Euler(phi, d)
If e = 0 Or e = 1 Then GoTo top

x = Mult(255, e, n)
If Not Mult(x, d, n) = 255 Then
    DoEvents
    GoTo top
ElseIf Mult(x, d, n) = 255 Then
    key(1) = e
    key(2) = d
    key(3) = n
End If
End Sub

Private Function Euler(ByVal a As Long, ByVal b As Long) As Long
On Error GoTo error2
r1 = a: r = b
p1 = 0: p = 1
q1 = 2: q = 0
n = -1
Do Until r = 0
    r2 = r1: r1 = r
    p2 = p1: p1 = p
    q2 = q1: q1 = q
    n = n + 1
    r = r2 Mod r1
    c = r2 \ r1
    p = (c * p1) + p2
    q = (c * q1) + q2
Loop
s = (b * p1) - (a * q1)
If s > 0 Then
    x = p1
Else
    x = (0 - p1) + a
End If
Euler = x
Exit Function

error2:
Euler = 0
End Function

Private Function Mult(ByVal x As Long, ByVal p As Long, ByVal m As Long) As Long
y = 1
On Error GoTo error1
Do While p > 0
    Do While (p / 2) = (p \ 2)
        x = (x * x) Mod m
        p = p / 2
    Loop
    y = (x * y) Mod m
    p = p - 1
Loop
Mult = y
Exit Function

error1:
y = 0
End Function

Private Function IsPrime(lngNumber As Long) As Boolean
Dim lngCount As Long
Dim lngSqr As Long
Dim x As Long

    lngSqr = Sqr(lngNumber) ' get the int square root

    If lngNumber < 2 Then
        IsPrime = False
        Exit Function
    End If

    lngCount = 2
    IsPrime = True

    If lngNumber Mod lngCount = 0& Then
        IsPrime = False
        Exit Function
    End If

    lngCount = 3

    For x& = lngCount To lngSqr Step 2
        If lngNumber Mod x& = 0 Then
            IsPrime = False
            Exit Function
        End If
    Next
End Function

Private Function Base64_Encode(DecryptedText As String) As String
Dim c1, c2, c3 As Integer
Dim w1 As Integer
Dim w2 As Integer
Dim w3 As Integer
Dim w4 As Integer
Dim n As Integer
Dim retry As String
   For n = 1 To Len(DecryptedText) Step 3
      c1 = Asc(Mid$(DecryptedText, n, 1))
      c2 = Asc(Mid$(DecryptedText, n + 1, 1) + Chr$(0))
      c3 = Asc(Mid$(DecryptedText, n + 2, 1) + Chr$(0))
      w1 = Int(c1 / 4)
      w2 = (c1 And 3) * 16 + Int(c2 / 16)
      If Len(DecryptedText) >= n + 1 Then w3 = (c2 And 15) * 4 + Int(c3 / 64) Else w3 = -1
      If Len(DecryptedText) >= n + 2 Then w4 = c3 And 63 Else w4 = -1
      retry = retry + mimeencode(w1) + mimeencode(w2) + mimeencode(w3) + mimeencode(w4)
   Next
   Base64_Encode = retry
End Function

Private Function Base64_Decode(a As String) As String
Dim w1 As Integer
Dim w2 As Integer
Dim w3 As Integer
Dim w4 As Integer
Dim n As Integer
Dim retry As String

   For n = 1 To Len(a) Step 4
      w1 = mimedecode(Mid$(a, n, 1))
      w2 = mimedecode(Mid$(a, n + 1, 1))
      w3 = mimedecode(Mid$(a, n + 2, 1))
      w4 = mimedecode(Mid$(a, n + 3, 1))
      If w2 >= 0 Then retry = retry + Chr$(((w1 * 4 + Int(w2 / 16)) And 255))
      If w3 >= 0 Then retry = retry + Chr$(((w2 * 16 + Int(w3 / 4)) And 255))
      If w4 >= 0 Then retry = retry + Chr$(((w3 * 64 + w4) And 255))
   Next
   Base64_Decode = retry
End Function

Private Function mimeencode(w As Integer) As String
   If w >= 0 Then mimeencode = Mid$(base64, w + 1, 1) Else mimeencode = ""
End Function

Private Function mimedecode(a As String) As Integer
   If Len(a) = 0 Then mimedecode = -1: Exit Function
   mimedecode = InStr(base64, a) - 1
End Function

Public Function Encode(ByVal Inp As String, ByVal e As Long, ByVal n As Long) As String
Dim s As String
s = ""
m = Inp

If m = "" Then Exit Function
s = Mult(CLng(Asc(Mid(m, 1, 1))), e, n)
For i = 2 To Len(m)
    s = s & "+" & Mult(CLng(Asc(Mid(m, i, 1))), e, n)
Next i
Encode = Base64_Encode(s)
End Function

Public Function Decode(ByVal Inp As String, ByVal d As Long, ByVal n As Long) As String
St = ""
ind = Base64_Decode(Inp)
For i = 1 To Len(ind)
    nxt = InStr(i, ind, "+")
    If Not nxt = 0 Then
        tok = Val(Mid(ind, i, nxt))
    Else
        tok = Val(Mid(ind, i))
    End If
    St = St + Chr(Mult(CLng(tok), d, n))
    If Not nxt = 0 Then
        i = nxt
    Else
        i = Len(ind)
    End If
Next i
Decode = St
End Function

Conclusion :


uggly ....

www.omnikod.fr.fm
divers@omnikod.fr.fm

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
14
Date d'inscription
vendredi 4 juillet 2008
Statut
Membre
Dernière intervention
11 août 2008

ça marche nickel.
Très bon code, merci
Messages postés
14
Date d'inscription
vendredi 6 février 2004
Statut
Membre
Dernière intervention
14 février 2005

pour pouvoir utiliser les fonctions, tu as besoin d'une chaine de caractères -> Inp (c con mais faut y penser), c'est le texte que tu vas encryter/décrypter, il te faut aussi un couple de clés (e,n) et (d,n) qu'il faudra calculer. pour les calculer et si tu ne sais pas faire, je te conseil ce site, il est vachement bien fait.

http://sebsauvage.net/comprendre/encryptage/crypto_rsa.html

bonne chance, c'est le plus chiant à faire et le plus long à faire, faut y aller. à tatons

si tu veux, pour essayer, je te passe ces clée :
(e,n)=(8259,8383)
(d,n)=(139,8383)
Messages postés
7
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
23 mars 2004

je souhaiterai savoir quels sont les parametres a mettre au fonction encode et decode pour crypter puis decrypter.
j'ai fais qq tests pas tres concluant, je ne vois pas quoi mettre...

si quelqu'un peut publier un exemple, ce serai cool.

lol
quelqu'un pourrait me dire comment utiliser ce module pour encrypter et décrypter le contenu d'une textbox??

A+
le fait que vb est si lent c'est que c'est un language de haut niveau ! donc on est obliuger de faire avec les fonctionne qui nous livrent avec (contenue dans msvbvmXX.dll) l'ideal sera de pouvoir inclure de l'asm inline pour certaine fonction qui on besoin de rapiditer ! tel les manipulation de chaine et les mouvements de pointeurs!
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.