Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période.
Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.

~ Rechercher ~

  

~ Annuaire VB ~
 Rechercher un site :
  

~ Partenaires ~

Classe : clsCryptage
Classe de cryptage et décryptage de données (fichiers et chaînes de caractères).
(Consulté 24656 fois.)

Classe pour le cryptage et décryptage de fichiers ou de chaînes.

Lorsque vous travaillez avec des données sensibles vous pouvez avoir besoin de protéger des informations afin d'éviter qu'un utilisateur puissent les lire. Il existe de nombreux logiciels qui proposent des techniques complexes de cryptage pour protéger ces informations.
Si vous ne disposez pas de moyen important, et que le dernier cryptage à la mode n'est pas ce que vous recherchez, la classe ci-dessous peut alors vous convenir.

La méthode employée est assez ancienne, et utilise tout simplement l'instruction XOR. Pour rendre le cryptage plus complexe (comment obtenir de bons résultats avec une méthode vieille comme le monde...), une clé cyclique peut être utilisée (plus elle sera grande et variée, plus le cryptage sera efficace), et en plus de cela, les données sont enregistrées à l'envers (le premier caractère du fichier d'origine se retrouve à la fin, et inversement).

Son utilisation est relativement simple. Suivant les cas, il faut déclarer un objet local ou global (Dim cCryptage As clsCryptage puis Set cCryptage = New clsCryptage). A partir de là, on manipule les propriétés et méthodes de l'objet.

cCryptage.FichierSource indique le fichier source à crypter ou à décrypter,
cCryptage.FichierDestination indique le fichier résultat du cryptage ou décryptage,
cCryptage.Str représente une chaîne qui sera cryptée ou décryptée,
cCryptage.Cle est la clé de cryptage (décryptage) utilisée,
cCryptage.Erreur permet de récupérer un message d'erreur en cas d'échec dans le cryptage ou décryptage,
cCryptage.Cryptage() est la fonction principale de la classe. Elle permet de crypter et décrypter, d'un fichier vers un fichier, d'un fichier vers une chaîne, d'une chaîne vers un fichier, d'une chaîne vers une chaîne.

C'est une classe que j'utilise assez souvent. Je vous recommande de ne pas utiliser de fichiers trop importants, la méthode de cryptage atteint, en effet, rapidement ses limites (au niveau vitesse de traitement). A l'origine cette classe est plutôt destiné à des fichiers d'initialisation.

Enfin, le code n'est pas très renseigné mais il n'est pas compliqué non plus. C'est principalement du calcul et de la manipulation de chaînes et de fichiers. Vous pouvez récupérer le code (fichier compressé), ou bien le consulter en direct ci-dessous.

Option Explicit

Private
mst_FicSrc As String ' Fichier source à (dé)crypter
Private mst_FicDst As String ' fichier destination du (dé)cryptage

Private mst_Chaine() As Byte ' Chaîne à (dé)crypter
Private mlg_Chaine As Long ' Longueur de la chaîne

Private mst_Cle() As Byte ' Clé de cryptage
Private mlg_Cle As Long ' Taille de la clé de cryptage
Private mst_Erreur As String ' Dernier message d'erreur

Public Enum eTypeCryptage
    et_Cryptage = 0
    et_Decryptage = 1
End Enum

Public Enum
eModeCryptage
    em_Fichier_Fichier = 0
    em_Fichier_Chaine = 1
    em_Chaine_Fichier = 2
    em_Chaine_Chaine = 3
End Enum

Property Get
FichierSource() As String
FichierSource = mst_FicSrc
End Property

Property Let
FichierSource(stTmp As String)
mst_FicSrc = stTmp
End Property

Property Get
FichierDestination() As String
FichierDestination = mst_FicDst
End Property

Property Let
FichierDestination(stTmp As String)
mst_FicDst = stTmp
End Property

Property Get
Str() As String
Dim
lgFor As Long
Dim
stTmp()
ReDim stTmp(mlg_Chaine)
For lgFor = 0 To mlg_Chaine
    stTmp(lgFor) = Chr$(mst_Chaine(lgFor))
Next lgFor
Str = Join(stTmp, vbNullString)
End Property

Property Let
Str(stTmp As String)
Dim
lgFor As Long
mlg_Chaine = Len(stTmp) - 1
ReDim mst_Chaine(mlg_Chaine) As Byte
For lgFor = 0 To mlg_Chaine
    mst_Chaine(lgFor) = Asc(Mid$(stTmp, lgFor + 1, 1))
Next lgFor
End Property

Property Get
Cle() As String
Dim
lgFor As Long
Dim
stTmp As String
stTmp = vbNullString
For lgFor = 1 To UBound(mst_Cle)
    stTmp = stTmp & Chr$(mst_Cle(lgFor))
Next lgFor
Cle = stTmp
End Property

Property Let
Cle(stTmp As String)
Dim
lgFor As Long
mlg_Cle = Len(stTmp)
ReDim mst_Cle(mlg_Cle) As Byte
For lgFor = 1 To mlg_Cle
    mst_Cle(lgFor) = Asc(Mid$(stTmp, lgFor, 1))
Next lgFor
End Property

Property Get
Erreur() As String
Erreur = mst_Erreur
End Property

Public Function
Cryptage(inTypeCryptage As eTypeCryptage, inModeCryptage As eModeCryptage) As Long
' Crypte ou décrypte (suivant la valeur de inTypeCryptage)
Dim inFree As Integer
Dim
lgFor As Long

If
inModeCryptage = em_Fichier_Chaine Or inModeCryptage = em_Fichier_Fichier Then
    If
FichierExiste(mst_FicSrc) Then
       
mlg_Chaine = FileLen(mst_FicSrc)
       
ReDim mst_Chaine(mlg_Chaine) As Byte
        inFree = FreeFile
       
Open mst_FicSrc For Binary Access Read As #inFree
       
Do While Not EOF(inFree)
           
Get #inFree, , mst_Chaine
       
Loop
        Close
#inFree
        mlg_Chaine = mlg_Chaine - 1
       
ReDim Preserve mst_Chaine(mlg_Chaine) As Byte
   
Else
       
Cryptage = -1
        mst_Erreur = "Fichier source '" & mst_FicSrc & "' introuvable."
       
Exit Function
    End If
End If

If
inTypeCryptage = et_Cryptage Then Call Crypte Else Call DeCrypte

If inModeCryptage = em_Chaine_Fichier Or inModeCryptage = em_Fichier_Fichier Then
    If
FichierExiste(mst_FicDst) Then Kill mst_FicDst
    inFree = FreeFile
   
Open mst_FicDst For Binary Access Write As #inFree
   
For lgFor = 0 To mlg_Chaine
        Put #inFree, lgFor + 1, mst_Chaine(lgFor)
   
Next lgFor
   
Close #inFree
End If
End Function

Private Sub
Crypte()
' Crypte la chaîne par défaut de la classe
Dim lgFor As Long
Dim
mst_Tmp() As Byte
mst_Tmp() = mst_Chaine()
For lgFor = 0 To mlg_Chaine
    mst_Tmp(lgFor) = mst_Chaine(mlg_Chaine - lgFor) Xor mst_Cle((lgFor
Mod mlg_Cle) + 1)
Next lgFor
mst_Chaine = mst_Tmp
End Sub

Private Sub
DeCrypte()
' Décrypte la chaîne par défaut de la classe
Dim lgFor As Long
Dim
mst_Tmp() As Byte
mst_Tmp() = mst_Chaine()
For lgFor = 0 To mlg_Chaine
    mst_Tmp(mlg_Chaine - lgFor) = mst_Chaine(lgFor) Xor mst_Cle((lgFor
Mod mlg_Cle) + 1)
Next lgFor
mst_Chaine = mst_Tmp
End Sub

Private Function
FichierExiste(stFichier As String) As Boolean
' Teste l'existence d'un fichier
On Error Resume Next
Err = 0
Call FileLen(stFichier)
FichierExiste = (Err = 0)
End Function

Private Sub
Class_Initialize()
' Initialisation de la clé sur 13, 1, 19, 87
' (Clé cyclique pour cryptage plus performant)
ReDim mst_Cle(4) As Byte
mst_Cle(1) = 13
mst_Cle(2) = 1
mst_Cle(3) = 19
mst_Cle(4) = 87
mlg_Cle = 4
End Sub

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr