begin process at 2012 02 17 08:02:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Optimisation du code

 > CRYPTAGE ET DÉCRYPTAGE DE CHAÎNES ET DE FICHIERS [MODULE DE CLASSE]

CRYPTAGE ET DÉCRYPTAGE DE CHAÎNES ET DE FICHIERS [MODULE DE CLASSE]


 Information sur la source

Note :
Aucune note
Catégorie :Optimisation du code Classé sous :cryptage, décryptage, 128bits, alexandre pukall Niveau :Débutant Date de création :25/10/2008 Date de mise à jour :10/01/2010 22:03:25 Vu / téléchargé :5 606 / 508

Auteur : PCPT

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Cette classe (VB6, importable pour VBA) vous donne un accès facile pour crypter et décrypter des données.


j'avais besoin assez rapidement d'un code fiable, aussi après recherches (pas la peine de ré-inventer la roue...) je suis tombé sur le code d'Alexandre PUKALL, à cette adresse : http://membres.lycos.fr/pc1/
Merci à lui pour ce partage

après tests, le résultat me convenait, mais pas les performances

j'ai donc remanié son code "libre" :
=> le codage d'un fichier est 2 fois plus rapide
=> le codage d'une chaîne est 21 fois plus rapide :p


la classe offre :
=> les évènements d'état de traitement
=> les méthodes pour :
   -> (dé)cryptage de string
   -> (dé)cryptage de tableau de byte
   -> (dé)cryptage de fichier (en mémoire)
   -> (dé)cryptage de fichiers volumineux (écriture en direct)
=> état de travail en cours et de succès de l'opération

Source

  • Sub Test()
  • Dim AfCipher As New AfCls_Cipher
  • With AfCipher
  • .Key = "blabla"
  • .DecryptString "pdfjijdolknhnmpeapnneeipoboockco"
  • If .Success Then MsgBox .Value
  • .CryptSmallFile App.Path & "\PrivateFile.zip", App.Path & "\CryptedFile.dat"
  • If .Success Then MsgBox .Value, , "Fichier crypté avec succès"
  • End With
  • Set AfCipher = Nothing
  • End Sub
Sub Test()
    Dim AfCipher As New AfCls_Cipher

    With AfCipher
        .Key = "blabla"
        .DecryptString "pdfjijdolknhnmpeapnneeipoboockco"
        If .Success Then MsgBox .Value
        
        .CryptSmallFile App.Path & "\PrivateFile.zip", App.Path & "\CryptedFile.dat"
        If .Success Then MsgBox .Value, , "Fichier crypté avec succès"
    End With
    
    Set AfCipher = Nothing
End Sub

 Conclusion

** j'ai commenté également "au mieux" le fonctionnement du cryptage, les crédits reviennent à l'auteur de l'algo : Alexandre PUKALL


** si certains d'entre vous ont des repères de comparaison, tant en rapidité qu'en qualité, n'hésitez pas à en faire part ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

25 octobre 2008 06:42:38 :
.
27 octobre 2008 19:57:41 :
ajout d'un exemple ADO access à la demande d'Asimengo
10 janvier 2010 22:03:26 :
petite erreur dans les évènements (mauvais nom), corrigée

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) [VB2008] OBSERVER L'ACTIVITÉ INPUT (CLAVIER SOURIS) DE L'UTI...
Source avec Zip Source avec une capture PUBLIC SHARED SANS MODULE - VARIABLE SINGLETON : IDENTIFICAT...
Source avec Zip Source avec une capture RÉCUPÉRATION DES IMAGES SYSTÈME DEPUIS LEUR EXTENSION OU LEU...
Source avec Zip Source avec une capture FILE FOLDER LOCKER - BLOQUER (ET DÉBLOQUER) L'ACCÈS À CERTAI...
Source avec Zip Source avec une capture FOLDER HELPER - DOSSIERS SPECIAUX, MANIPULATION DE DOSSIERS,...

 Sources de la même categorie

Source avec Zip FONCTIONS PRATIQUE POUR LISTVIEW par Galactus13
Source avec une capture Source .NET (Dotnet) HISTOGRAMME - SUITE - GRAPHIQUE DE BARRES VERTICALES POUR UN... par tchconst
Source .NET (Dotnet) HISTOGRAMME (BIS) BARRES VIA DATATABLE 100 % PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) AFFICHER UN HISTOGRAMME PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) PROFIL BINAIRE D'UN OBJET par tchconst

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) CRYPTAGE DÉCRYPTAGE DE FICHIER PAR MOT DE PASSE par auban
Source avec Zip Source avec une capture CRYPTAGE ET DÉCRYPTAGE DE TEXTE (SIMPLE) par miata
RC4 ENCRYPT/DECRYPT FONCTION par Joke758
Source avec Zip Source avec une capture CHARLIGMA par CHAR As Human
Source avec Zip Source avec une capture CRYPTAGE/DÉCRYPTAGE DES SCRIPTS "UNIVERSAL MATRICE V0.57" par Egyde

Commentaires et avis

Commentaire de asimengo le 27/10/2008 11:13:09

super intéressant.

Je te fais une proposition si tu peux la trouver intéressante.
l'ajout de la méthode (dé)cryptage de recordset.
Pour le cryptage envoie en paramètres le ADODB.Recordset et pour le décryptage pareil retour d'un recordset (bien évidemment le résultat sera dans un paramètre Byref).

En fait tu traites déjà, disons 80% de ce cas avec les méthodes "(dé)cryptage de tableau de byte" vu que tu tiens compte de la dimension du tableau.
La seule différence pour le recordset sera dans le fichier de cryptage de sauvegarder à l'entête la définition des champs et pour le décryptage la reconstitution du recordset. Cette méthode sera d'autant plus intéressante que le décryptage se fait en mémoire.

Si tu faisais cette mise jour je suis preneur, je pense qu'il y'aurait pas mal d'application.

Commentaire de PCPT le 27/10/2008 13:46:44 administrateur CS

salut asimengo,

c'est faisable oui, mais je t'avoue ne pas voir le but réel...

si c'est pour crypter le contenu de certains champs ou tables, pour avoir au fanal une base cryptée, je comprends ok, mais ce n'est pas à la classe de le faire, c'est le dev qui applique la méthode là où il le veut

mais comme tu parles de fichiers, tu penses plus à exporter complètement un RS apparemment, et c'est là où je ne te suis plus...
un RS peut très bien être le résultat d'une requête, pas juste une table.
l'intérêt est déjà alors beaucoup plus limité.

mis à part les nombreux tests à effectuer (valeur vide, type BOOL, OLE, MEMO, etc...), çà me semble plus rapide et (dans ce cas) logique de simplement exporter le RS en txt (par sa méthode) et de crypter le résultat, non?

peux-tu apporter quelques précisions sur ton idée?
merci

Commentaire de asimengo le 27/10/2008 16:30:48

Oui en fait c'est bien d'un RS que je parle, peu importe que ce soit une table ou résultat de requête.

Ce n'est nullement pas dans le but de me faire une BD propriétaire.

En fait j'ai crée pour mon exploitation perso des composants permettant de piloter une appli entière depuis une base de données personnalisée. Cette base de données contient la structure de toutes les tables de la BD, les menus, les paramètres, la structure de tous les combos, la structure des formualaires, .... Ces composants creent dynamiquement les contrôles des formulaires en fonction des commandes. Aucun souci vitesse, on n'a même pas l'impression.

C'est cette base de données perso que je veux crypter question de protéger ma technique. En effet il suffit d'avoir ses composants et connaitre la structure de cette base de données perso pour me copier le Copyright.

Ta source m'intéresse effectivement pour crypter chaque table de ma bd perso (bd non relationnelle, je n'en ai pas besoin puisque c'est moi qui la fournit) et de pouvoir la mettre en mémoire, ce que je fais déjà en ce moment à la différence que la source n'est pas crypter et la technique non protégée.
Dans tous les cas je dois passer par là, mais s'il y'a déjà une source ready to use, c'est plutot mieux de démarrer sur des references qui marchent.

NB: Je suis uniquement intéressé par la méthode de Fichier crypter à mémoire. Donc d'une classe ayant les caractéristiques similaires d'un RS, mais avec juste en plus la propriété pour indiquer le chemin du fichier source et la code de cryptage.

Commentaire de PCPT le 27/10/2008 20:03:35 administrateur CS

après pas mal de tentatives, je n'arrive pas à faire un clone du RecordSet SANS qu'il ne soit lié à celui d'origine

j'ai mis à jour le projet (LA CLASSE RESTE LA MÊME), avec 2 routines qui peuvent plus ou moins correspondre à ta demande

mode dev => ta base est faite, tu lances ta routine et chaque RS (de ton choix, lié à une vue de table très logiquement) est alors crypté

mod utilisateur => chargement de la table portant le nom de la form, chargement (conversion donc) du RS en Collection, puis affichage dans les différents controls pour l'exemple

ce n'est pas tout à fait ta demande, mais vue ta question "dynamique" et le titre de ta dernière source, çà doit pas être si loin ;)

++

Commentaire de asimengo le 28/10/2008 15:26:48

@PCPT : Merci une fois de plus de la peine que tu t'es donné pour ma demande.

En définitive je pense que ta méthode "(dé)cryptage de tableau de byte" me suffirait largement, après le reste je manage suivant mes besoins.

En effet, il me suffit de passer à ta méthode "tableau" légèrement modifiée, le RS.getrow. En effet il me faudra les enregs en ligne et les champs en colonne. Pour avoir la structure des champs, il faudra passer aux 4 premières lignes respectivement les proprités champs Name, Type, DefinedSize, Attributes. J'aime bien toujours que mes composants soient autonomes.

Au décrytage, une lecture séquentielle permet de reconstituer aisément le RS, ou dans mon cas ma Classe de gestion dynamique des items.

Pour le clone du recordset, ci-dessous le code que j'utilise
'Copie les enregistrements de poRstSource dans poRstDestination
Public Function MakeCloneRecordset(ByVal poRstSource As ADODB.Recordset, ByRef poRstDestination As ADODB.Recordset, Optional ByVal pbIgnoreData As Boolean = False, Optional ByRef paMaxLenghtFields As Variant) As Boolean
On Error GoTo Err_MakeCloneRecordset
Dim oFld As ADODB.Field, vBookmark As Variant, bEvaluateMaxLenght As Boolean, lCpt As Long

    Set poRstDestination = New ADODB.Recordset
    With poRstDestination
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockPessimistic
        'Initialisation de la liste des champs
        For Each oFld In poRstSource.Fields
            .Fields.Append oFld.Name, oFld.Type, oFld.DefinedSize, oFld.Attributes
        Next oFld
        'Préparation du tableau pour la recupération de la taille max des champs
        If Not IsMissing(paMaxLenghtFields) Then
            bEvaluateMaxLenght = True
            ReDim paMaxLenghtFields(1 To .Fields.Count) As Long
        End If
        
        'Ouverture du recordset pour remplissage
        .Open
    End With
    
    If Not pbIgnoreData Then
        'Remplissage du recordset
        With poRstSource
        'On peut aussi faire With poRstSource.Clone(adLockReadOnly), ainsi on ne s'embetera plus avec la gestion des bookmarks.
        'Mais je me suis demandé si ce n'était pas du temps perdu cette méthode, temps de Clone.
        'je ne me suis pas penché dessus pour voir les différences de vitesse.
            If .RecordCount <> 0 Then
                vBookmark = .Bookmark
                .MoveFirst
                Do While Not .EOF
                    poRstDestination.AddNew
                    For Each oFld In .Fields
                        lCpt = lCpt + 1
                        poRstDestination.Fields(oFld.Name).Value = oFld.Value
                        If bEvaluateMaxLenght And Not IsNull(oFld.Value) Then paMaxLenghtFields(lCpt) = MaxValues(paMaxLenghtFields(lCpt), Len(Str(oFld.Value)))
                    Next oFld
                    poRstDestination.Update
                    .MoveNext
                Loop
                .Bookmark = vBookmark
                poRstDestination.MoveFirst
            End If
        End With
    End If
    
    MakeCloneRecordset = True

Exit_MakeCloneRecordset:
    Exit Function

Err_MakeCloneRecordset:
    MsgBox Err.Description
    Resume Exit_MakeCloneRecordset
End Function

Merci encore.
A+

Commentaire de PCPT le 10/01/2010 22:05:39 administrateur CS

maj, 3 fois rien, un CRYPTING était relevé lors du DECRYPTING d'un tableau de byte

j'utilise cette classe pour un autre projet, le résultat est satisfaisant ^^

je mettrai à jour si vous avez d'autres idées

++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 Décryptage dans un dossier Temp [ par gotakk ] Bonjour, je suis débutant en visual basic et je fait un jeu sous frog creator. Mon problème est le suivant : j'ai trouvé une source qui à une fonctio Cryptage TripleDES [ par dheroux ] Bonjour, Je programme sous VB NET 2008. Le cryptage TripleDES s'effectue à l'aide d'une clé de 192 bits (et d'un vecteur) Lorsqu'on génère automatiqu Cryptage base de données [ par lionyz ] Bonjour, J'ai créé une base de données DAO avec l'instruction Set Madb = CreateDatabase(NomBase, dbLangGeneral, dbEncrypt) Après plusieure éssais je Problème décryptage [ par lilj ] Bonjour, Voilà, j'utilise la source [url=http://www.vbfrance.com/codes/CRYPTAGE-DECRYPTAGE-FICHIER-AVEC-AES_48385.aspx]ELGAESCRYPT[/url]. Mais en l'u Cherche cryptage de ce fichier [ par viruskail ] Bonjour je recherche le cryptage de ce fichier : http://www.megaupload.com/?d=4HL0DAPM aidez moi svp Recherche - Cryptage DES [ par Yoooop ] Bonjour à tous, Voilà plusieurs jours que j'essaye de trouver un bout de code qui prend en compte le cryptage DES avec le mode ECB. J'ai trouvé 2-3 [BAR]Cryptage de disque [ par lambene ] Quelles sont les étapes de cryptage d'un disque?


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,683 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales