Crypter en rsa

Soyez le premier à donner votre avis sur cette source.

Vue 11 743 fois - Téléchargée 807 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

J'ai déjà vu ce code sur un autre site et perso c de ca que je me sers dès que je dois crypter des données. Le problème, c que le code que j'ai est bcp plus court et marche qd meme!
Prenez qd meme ce cryptage, il est vraiment pas mal!
C cool mais faut pas etre pressé!
C chiant que c'est long comme ça le VB!

VB7 est plus rapide?
VB7 sera complètement different des anciens VB, il sera beaucoup plus proche du C++, en plus (presque) tout les programmes compilés avec VS.NET s'executeront sur un CLR ce qui fait que tout les langages seront tous à peu près aussi rapides.
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!
quelqu'un pourrait me dire comment utiliser ce module pour encrypter et décrypter le contenu d'une textbox??

A+

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.