Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRYPTAGE/DECRYPTAGE RSA SUR 64 BITS


Information sur la source

Catégorie :Sécurité Classé sous : cryptage, décryptage, rsa Niveau : Initié Date de création : 10/05/2001 Vu / téléchargé: 10 375 / 1 070

Note :
9 / 10 - par 11 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

Module de cryptage/decryptage RSA 64 bits avec génération des clés privée/public.
 

Source

  • Public key(1 To 3) As Double
  • Public p As Double, q As Double
  • Public PHI As Double
  • Public Sub keyGen()
  • Dim E#, D#, N#
  • Const PQ_UP As Integer = 9999
  • Const PQ_LW As Integer = 3170
  • Const KEY_LOWER_LIMIT As Long = 10000000
  • p = 0: q = 0
  • Randomize
  • Do Until D > KEY_LOWER_LIMIT
  • Do Until IsPrime(p) And IsPrime(q)
  • p = Int((PQ_UP - PQ_LW + 1) * Rnd + PQ_LW)
  • q = Int((PQ_UP - PQ_LW + 1) * Rnd + PQ_LW)
  • Loop
  • N = p * q
  • PHI = (p - 1) * (q - 1)
  • E = GCD(PHI)
  • D = Euler(E, PHI)
  • Loop
  • key(1) = E
  • key(2) = D
  • key(3) = N
  • End Sub
  • Private Function Euler(E3 As Double, PHI3 As Double) As Double
  • On Error Resume Next
  • Dim u1#, u2#, u3#, v1#, v2#, v3#, q#
  • Dim t1#, t2#, t3#, z#, uu#, vv#, inverse#
  • u1 = 1
  • u2 = 0
  • u3 = PHI3
  • v1 = 0
  • v2 = 1
  • v3 = E3
  • Do Until (v3 = 0)
  • q = Int(u3 / v3)
  • t1 = u1 - q * v1
  • t2 = u2 - q * v2
  • t3 = u3 - q * v3
  • u1 = v1
  • u2 = v2
  • u3 = v3
  • v1 = t1
  • v2 = t2
  • v3 = t3
  • z = 1
  • Loop
  • uu = u1
  • vv = u2
  • If (vv < 0) Then
  • inverse = vv + PHI3
  • Else
  • inverse = vv
  • End If
  • Euler = inverse
  • End Function
  • Private Function GCD(nPHI As Double) As Double
  • On Error Resume Next
  • Dim nE#, y#
  • Const N_UP = 99999999
  • Const N_LW = 10000000
  • Randomize
  • nE = Int((N_UP - N_LW + 1) * Rnd + N_LW)
  • top:
  • x = nPHI Mod nE
  • y = x Mod nE
  • If y <> 0 And IsPrime(nE) Then
  • GCD = nE
  • Exit Function
  • Else
  • nE = nE + 1
  • End If
  • GoTo top
  • End Function
  • Private Function IsPrime(lngNumber As Double) As Boolean
  • On Error Resume Next
  • Dim lngCount#
  • Dim lngSqr#
  • Dim x#
  • lngSqr = Int(Sqr(lngNumber))
  • 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
  • Public Function Mult(ByVal x As Double, ByVal p As Double, ByVal m As Double) As Double
  • On Error GoTo error1
  • y = 1
  • Do While p > 0
  • Do While (p / 2) = Int((p / 2))
  • x = nMod((x * x), m)
  • p = p / 2
  • Loop
  • y = nMod((x * y), m)
  • p = p - 1
  • Loop
  • Mult = y
  • Exit Function
  • error1:
  • y = 0
  • End Function
  • Private Function nMod(x As Double, y As Double) As Double
  • On Error Resume Next
  • Dim z#
  • z = x - (Int(x / y) * y)
  • nMod = z
  • End Function
  • Public Function enc(tIp As String, eE As Double, eN As Double) As String
  • On Error Resume Next
  • Dim encSt As String
  • encSt = ""
  • e2st = ""
  • If tIp = "" Then Exit Function
  • For i = 1 To Len(tIp)
  • encSt = encSt & Mult(CLng(Asc(Mid(tIp, i, 1))), eE, eN) & "+"
  • Next i
  • enc = encSt
  • End Function
  • Public Function dec(tIp As String, dD As Double, dN As Double) As String
  • On Error Resume Next
  • Dim decSt As String
  • decSt = ""
  • For z = 1 To Len(tIp)
  • ptr = InStr(z, tIp, "+")
  • tok = Val(Mid(tIp, z, ptr))
  • decSt = decSt + Chr(Mult(tok, dD, dN))
  • z = ptr
  • Next z
  • dec = decSt
  • End Function
Public key(1 To 3) As Double
Public p As Double, q As Double
Public PHI As Double

Public Sub keyGen()

Dim E#, D#, N#
Const PQ_UP As Integer = 9999
Const PQ_LW As Integer = 3170
Const KEY_LOWER_LIMIT As Long = 10000000
p = 0: q = 0

Randomize

Do Until D > KEY_LOWER_LIMIT
Do Until IsPrime(p) And IsPrime(q)
p = Int((PQ_UP - PQ_LW + 1) * Rnd + PQ_LW)
q = Int((PQ_UP - PQ_LW + 1) * Rnd + PQ_LW)
Loop
                
    N = p * q
    PHI = (p - 1) * (q - 1)
    E = GCD(PHI)
    D = Euler(E, PHI)
Loop

        key(1) = E
        key(2) = D
        key(3) = N
                        
End Sub


Private Function Euler(E3 As Double, PHI3 As Double) As Double

On Error Resume Next

Dim u1#, u2#, u3#, v1#, v2#, v3#, q#
Dim t1#, t2#, t3#, z#, uu#, vv#, inverse#

u1 = 1
u2 = 0
u3 = PHI3
v1 = 0
v2 = 1
v3 = E3

Do Until (v3 = 0)
     q = Int(u3 / v3)
     t1 = u1 - q * v1
     t2 = u2 - q * v2
     t3 = u3 - q * v3

     u1 = v1
     u2 = v2
     u3 = v3

     v1 = t1
     v2 = t2
     v3 = t3
     z = 1
Loop
uu = u1
vv = u2

If (vv < 0) Then
          inverse = vv + PHI3
Else
     inverse = vv
End If

Euler = inverse

End Function

Private Function GCD(nPHI As Double) As Double

On Error Resume Next

Dim nE#, y#
Const N_UP = 99999999
Const N_LW = 10000000

Randomize
nE = Int((N_UP - N_LW + 1) * Rnd + N_LW)

top:
    x = nPHI Mod nE
    y = x Mod nE
    If y <> 0 And IsPrime(nE) Then
        GCD = nE
        Exit Function
    Else
        nE = nE + 1
    End If
    
    GoTo top

End Function

Private Function IsPrime(lngNumber As Double) As Boolean
    
On Error Resume Next

Dim lngCount#
Dim lngSqr#
Dim x#
lngSqr = Int(Sqr(lngNumber))


    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

Public Function Mult(ByVal x As Double, ByVal p As Double, ByVal m As Double) As Double

On Error GoTo error1
    
y = 1
    
    Do While p > 0


        Do While (p / 2) = Int((p / 2))
            x = nMod((x * x), m)
            p = p / 2
        Loop
        y = nMod((x * y), m)
        p = p - 1
    Loop
    Mult = y
    Exit Function

error1:
y = 0

End Function

Private Function nMod(x As Double, y As Double) As Double

On Error Resume Next

Dim z#

z = x - (Int(x / y) * y)

nMod = z

End Function

Public Function enc(tIp As String, eE As Double, eN As Double) As String

On Error Resume Next

Dim encSt As String
encSt = ""
e2st = ""
    
    If tIp = "" Then Exit Function
    For i = 1 To Len(tIp)
        encSt = encSt & Mult(CLng(Asc(Mid(tIp, i, 1))), eE, eN) & "+"
    Next i

enc = encSt
   
End Function

Public Function dec(tIp As String, dD As Double, dN As Double) As String

On Error Resume Next

Dim decSt As String
decSt = ""

For z = 1 To Len(tIp)
    ptr = InStr(z, tIp, "+")
    tok = Val(Mid(tIp, z, ptr))
    decSt = decSt + Chr(Mult(tok, dD, dN))
    z = ptr
Next z

dec = decSt

End Function
   

Conclusion

N'oubliez pas de générer les clés !

Lundi 21 Mai ajout d'un projet démo et de l'exécutable.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de hvb le 11/11/2002 22:24:32

J'ai vu exactement la meme source sur un site, sauf que le message que tu as changé en "Bonjour aux utilisateurs de VBFrance" etait "Hello world"
http://www.tlsecurity.net/cgi-bin/download.cgi?Sourcecode/Vb/64.bit.Rsa.zip
t'aurais pu changer le design lol...

signaler à un administrateur
Commentaire de Derrick soft le 11/11/2002 22:39:09

Il est vrai que ce source à été copier sur pas mal de sites.
Mais comme VBFrance est open source je ne vais pas attaquer tous ceux qui copie.
Ce source est une introduction au RSA, su tu vas sur planet-source-code il y en à encore plus.

signaler à un administrateur
Commentaire de saiko le 06/01/2004 00:40:10

JE suis un gros Newbie et je voudrai faire marcher ce prog je fais coumment ? ^^

signaler à un administrateur
Commentaire de trance_man le 01/05/2007 19:24:42

Est ce qu'il y a quelle qu'un sur ce monde fort on vb qui peut m'aider dans mon projet de fin d'étude. il me reste que 2 semaine et je n'arive pas à avancé au secourt

signaler à un administrateur
Commentaire de matovitch le 20/01/2008 19:46:56

Salut !
Si l'algorythme est correct, ce chiffre se contente de substituer une lettre à un chiffre quelque soit sa place dans le texte.
C'est un chiffre monoalphabétique qui ne résisterai pas à une simple analyse de fréquence !?!
Je ne pense pas que les banques utilisent un tel chiffre...

signaler à un administrateur
Commentaire de tdt63 le 07/11/2008 11:00:00

Bonjour, l'algorithme a l'air bien, le problème c'est que au cryptage, il case un caractère, donc un octet par variable double, soit 1 octets sur 8 octets. Du coup, ça multiplie la taille de sortie par 8 et ça facilite les attaques puisqu'un caractère est toujours codé de la même façon dans le texte. En utilisant CopyMemory, pour remplir les tampons Double avec 8 octets, ça résoudrait ces deux problèmes, il me semble ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

cryptage decryptage RSA cle prive cle publique [ par thierrydelepine ] bonjour,je cherche un code sample sur le cryptage decryptage RSA mais avec de grandes clés.j'ai testé les differentes sources de VBFrance mais les clé Aider-moi (cryptage-décryptage de texte) [ par Quiske ] Salut tlm j'ai un bleme je fais un programme pour crypter et decrypter du texte:j'ai une textbox et 2 bouton je voudrais que en entrant un truc zarb c Cryptage RSA [ par pirate75000 ] Je desirais savoir si la je crypte par la methode RSA une valeur de chaine du type "TOTO" la valeur encripté retourné sera t elle la meme sous un syst comment ajouté un code de cryptage RSA [ par salimkalil ] salut a tt j'ai une  application de transfère de fichier par RS232 bd 9  avec vb 6 mais  je ne sais pas  comment ajouté un code de cryptage RSA pour ê Cryptography [ par vierax ] Bonjour, je suis un novice en la matière je tiens à le dire avant tout chose :) !Voilà, je suis actuellement en stage, et chargé d'un module ce crypto cryptage d'ub application [ par medbachar ] salut les amis je veux savoir est ce que c'est possible de crypter une application qui est creer en vb.net  qui peut cen Nouvelle méthode de cryptage [ par Sreizine ] Pour mon tritement de texte Texte XP ( http://www.vbfrance.com/article.aspx?Val=5725 )Je pensais à une nouvelle méthode de cryptage qui permettrai de Nouvel update pour Winux [ par tex ] Nouvel update pour Winux :IMPORTANT :Ceux qui ont déjà une version précédente ne doivent pas mettre le nouveau dossier "root". Cette fois, pour allége


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,718 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.