~ 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 ~
~ Partenaires ~
|
Classe : clsCryptage 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. 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, 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 ExplicitPrivate 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 |