IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] cryptage et protection de fichier INI [Trucs & Astuces]


Sujet :

VB 6 et antérieur

  1. #1
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut [VB6] cryptage et protection de fichier INI
    Salut à toutes et tous !

    J'aimerais savoir si, lors de l'installation d'une appli sur différents postes, il y a un moyen efficace de protéger les fichiers ini liés à cette appli de manière à ce que l'utilisateur ne puisse les lire et/ou les modifier.

    Toutes les pistes de réflexion sont les bienvenues

    Merci

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut ini
    l'intérêt des fichiers ini est justement que les utilisateurs peuvent entrer leurs paramètres.

    je ne vois donc pas pourquoi tu désires les en empêcher

  3. #3
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    salut !

    Le problème est que ces fichiers ini contiennent des données que je vais lire pour l'exécution de l'appli et qui ne peuvent en aucun cas être modifiées par l'utilisateur.

    Je vais essayer de donner un exemple :

    J'utilise le principe des fichiers ini pour calculer une remise sur un produit. Dans le fichier j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    [FAMILLE]
    CATEGPRODUIT1=10/0/%
    CATEGPRODUIT2=30/25/P
    Quand l'utilisateur choisit un produit, je renvoie la FAMILLE et la CATEGPRODUIT1 et en retour j'obtiens la remise en % (1er exemple) ou le prix pour une certaine quantité commandée (2ème exemple).

    Il est donc impensable que l'utilisateur aille changer ses remises sinon, c'est la faillite assurée

    Merci de me donner une piste

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    il faut stocker ca dans la base de données (si tu en as une)
    sinon a ce moment là fait un algo de cryptage.

  5. #5
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    salut !

    S'il n'y a pas d'autres solutions, j'opte pour le cryptage car le fichier des remises est propre à chaque utilisateur (et oui, tt le monde n'a pas les mêmes remises ) et livré via mail ou disquette lors de l'install de l'appli avec un code d'accès personnel aussi.

    J'ai trouvé un petit algo de cryptage simple mais cela me suffit

    Merci à vous

  6. #6
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Salut,

    Ca fait plaisir de savoir que tu as trouvé un algo simple de cryptage.
    Mais ça ferait encore plus plaisir que tu le partage avec nous.

  7. #7
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    en pus (ou a la place) du scryptage, tu peux utiliser un systeme de non-repudiation.

    c'est assez simple comme principe.
    dans ton fichier INI, tu met une entrée speciale qui est calculé en fonction du contenu du reste du fichier.
    et quand tu lie tu compare pour voir ce qui a été modifié.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    truc=10%
    bidule=20%
    code=M6#$CX23L@
    le code etant calculé d'une maniere secrete (par ex. un CRC32 avec des paramettres..)
    si le client change 10% en 15%, le code calculé ne sera pas le même que le code dans le fichier (oui le client n'est pas capable de calculer le code)
    donc à la lecture, tu vera que ca e corresponds pas.
    voilà, c'est tres simple.
    perso pour faire ce genre de calcul, je prend le contenu des données "truc=10%bidule=20%" j'additionne tous les octets, au quel j'addition la multipilcation des octets (un sur deux)... et j'affiche le resutat sous forme ascii.... enfin tu peux faire ce que tu veux, c'est rapide et simple.

  8. #8
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Salut Ricou13

    Pas de problème mais il faut attendre demain. Cette appli se trouve chez moi et mnt je bosse enfin c ce que je suis sensée faire

    Promis je mets ca demain dans ce post !

  9. #9
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    hpfx, ton algo me semble aussi intéressant, notamment pour tester une manipulation du fichier. Ce n'est pas, à proprement parler un cryptage mais, en tout cas, cela semble être un bon moyen de vérification

  10. #10
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    J'avais trouvé sur le net une classe de cryptage sympa mais que j'ai qd même dû modifier pour la simplifier et la rendre plus conviviale et j'utilisais les principes suivant (c'était pour un fichier de configuration du logiciel) :
    - Le fichier est écrit en mode binaire par insertion de variables et de structures
    - J'ajoute (tjs crypté) un mot clé, au début du fichier, pour simplement tester la provenance du fichier. Si le mot ne correspond pas, ce n'est pas moi qui l'ai crée donc arrêt.
    - Et j'ajoute, à la fin, la longueur en octets, du contenu du fichier. A l'ouverture, je récupére cette valeur et je la compare avec la longueur réélle du fichier. Le simple fait d'ouvrir ce fichier avec notepad et de l'enregistrer suffit pour en modifier la structure => Erreur.
    Ca donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mapchgO ]UAQmdJwZu^B jdJmmBIwCstC HP>WfWbOVH?  
     ÿÿ  ÿÿ  0u  ¨a   N  ˜:  '  ˆ   h^ry I_fb >SLI v<V> DRhEs`; vAPZXyWvf=jYPly< u>XqABg vEcuVuiR@qW`I[mJ kzAxQnc F\SQWy>nxBMQ]pKpP; QppcQy_ vOfA`g;OWS_AH;F]@[ hcYh?;g LCifFIGYmJYSz?w<O[ c=IUidC DBrPI^IMtax=gHWvc; kSAlI;S wC]m^u>HW;QRXVq]nK <g?OLOO ZDT<<rote>FN@BaKo; m<vrfnK tU?eMMJDskB]Qlk`p; ?EeIHM_ JXbKhj=wZwtRwoP]k[ BrnL<=W SURxBR=k^lZ`;uTZa[ O_KUBk; r>E@r\IWKpalYY`Es; ]Mv]LQo ]BRR?gbhl[V`SlxxJk `bXY<gs qJPN@FHILZVr_xlGd; KBAfmKW ?MG`XBWoD][wU\m]e; Ozs`upO L_M@?VP<oKUq@mh<Yk MwWmvjW ^LZiea`MNz?=`kqqsK DwfTmuk ;HAoYd@YLVug;^pFV; dWRv?kW XsDWhFKEvEt`aNo qqHpnY_ rTFoLYnq`aj<ek >clRVsc iYLls>kyi^zgP; eqFsjJs L@qqQ=ASmM`JK[ Z>=diiY?YiKkcK TvIL^kO vefVuvh<NBkOj]o<aK NsaT?EmqmrESHVOJ ^DcZavO KVQ_LLCI[Tf^\tNC gx_w=G? r]xd;zhyt\cnvhnY YGrTPX[ RrA]uR^ACfR]U\NK NKr_qPk ehhGuTi]`boM;rk? JTSSDoK B`QfKAmV<cRoo\o Jraosns cTDvQ>nvktayHmKqZ[ KY?B\KG Of^Qm]nLCGJTyzclE[ ?yxcADc A_aUNEqE@UtgJS_v>K >J><;Uo =QkXXqYjoHmMdKwLY; Lzm[`dg [RwjrUYFTRWJ_j;=\k J@j=Svw M`rImEB<TSPk@^oPv[ KcaISc[ g\SqxTqmJYiQkZhGy; w=RC]L_ OeizVC>CL?UyE^lBU[ ;tPIxl? GK`EZrDJgEfeetmon[ [RfslWS qSqNH[M?^l;`ZHVl]k ABdAQjo LcJlKpsSh^onWJScXk HAjW\PK KmygtgUFcXHvr\CoD[ >xQ<x<o L;WfmOnsK^JExBV_Z[ YomMM?W LJ]voY[IPK;kzE]xz[ Rs?vJGc ^KAxiSCpjZqXOiEHiK uV@@kkk aHorFsS>ftXx;PwVh[ NCK@UHW
     ;Eg[WXKO]k QCfTmw[ VyF?\QwdWjpgK_Dx vCDCVi? vJw_\NBfSMrBzSmt neA]\ok zePwRvbK\t? JPTbeM_
    Bien sûr, le code est loin d'être inviolable mais les clients n'ont aucun intérêt à le casser et l'informatique n'est pas franchement leur mêtier

  11. #11
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    salut !

    Voici la solution de cryptage que j'ai adoptée. Je n'ai pas tout fait toute seule mais j'ai adapté en Module de Classe un algo de cryptage trouvé sur le net. De mon appli, j'appelle Cryptage ou Décryptage quand j'en ai besoin. Voici le Module de Classe (il est en entier donc il fait les calculs que j'ai besoin aussi, ca, je suppose que ca ne vous intéresse pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
     
    Private mvarTexte As String 'copie locale
    Public Enum TypeOperation
        Cryptage = 0
        Decryptage = 1
    End Enum
    Private mvarTypeWork As TypeOperation 'copie locale
    Private mvarMotCle As String 'copie locale
     
    Public Property Let MotCle(ByVal vData As String)
        mvarMotCle = vData
    End Property
     
    Public Property Get MotCle() As String
        MotCle = mvarMotCle
    End Property
     
    Public Property Let TypeWork(ByVal vData As TypeOperation)
        mvarTypeWork = vData
    End Property
     
    Public Property Get TypeWork() As TypeOperation
        TypeWork = mvarTypeWork
    End Property
     
    Public Function ReturnValue() As String
        Dim TxtWork        As String
     
        Select Case mvarTypeWork
     
            Case 0  'Crytage
     
                TxtWork = CryptageTxt
     
            Case 1  'Decryptage
     
                TxtWork = DecryptageTxt
     
        End Select
        ReturnValue = TxtWork
     
    End Function
     
    Public Property Let Texte(ByVal vData As String)
        mvarTexte = vData
    End Property
     
    Public Property Get Texte() As String
        Texte = mvarTexte
    End Property
     
    '----------------------------------------------------------------------------
    '---
    '--- Fonction de decryptage
    '---
    '----------------------------------------------------------------------------
    Private Function DecryptageTxt() As String
    Dim strDecrypter, strCle As String 'Création de 2 variables de type String
    Dim intTemp, longu As Integer      'Création de 2 variables de type Integer
     
    'Création des tableaux
    Dim tabCle() As String
    Dim tabDecryptage() As String
    Dim tabAscii() As Integer
    Dim tabFinal() As String
     
     
          longu = Len(mvarMotCle)
          strDecrypter = mvarTexte
          lng = Len(strDecrypter)
     
          ReDim tabDecryptage(lng) As String
          ReDim tabAscii(lng) As Integer
          ReDim tabFinal(lng) As String
          ReDim tabCle(lng) As String
     
          For i = 1 To lng
               tabDecryptage(i) = Mid(strDecrypter, i, 1)
          Next
     
          strCle = mvarMotCle
     
          intTemp = lng \ longu
             For y = 0 To intTemp
            For i = 1 To longu
               w = (y * longu) + i
              If w <= lng Then
                tabCle(w) = Mid(strCle, i, 1)
                If tabCle(w) = "" Then
                Else
                      tabCle(w) = Asc(tabCle(w))
                End If
     
              End If
     
            Next
          Next
          For i = 1 To lng
            intTemp = Asc(tabDecryptage(i))
     
            tabAscii(i) = intTemp
               intTemp = Val(tabCle(i))
               tabAscii(i) = tabAscii(i) - intTemp
     
            If tabAscii(i) < 0 Then
                 tabAscii(i) = tabAscii(i) + 255
            End If
     
            tabFinal(i) = Chr(tabAscii(i))
               DecryptageTxt = DecryptageTxt + tabFinal(i)
     
          Next
    End Function
     
    '----------------------------------------------------------------------------
    '---
    '--- Fonction de cryptage
    '---
    '----------------------------------------------------------------------------
     
    Private Function CryptageTxt() As String
    Dim strCrypter, strCle As String 'Création de 2 variables de type String
    Dim intTemp, longu As Integer    'Création de 2 variables de type Integer
     
    'Création des tableaux
    Dim tabCle() As String
    Dim tabCryptage() As String
    Dim tabAscii() As Integer
    Dim tabFinal() As String
     
          longu = Len(mvarMotCle)
     
          strCrypter = mvarTexte
          strCrypter = Trim(strCrypter)
          strCle = mvarMotCle
          lng = Len(strCrypter)
     
          ReDim tabCryptage(lng) As String
          ReDim tabAscii(lng) As Integer
          ReDim tabFinal(lng) As String
          ReDim tabCle(lng) As String
     
          intTemp = lng \ longu
     
          For y = 0 To (intTemp)
            For i = 1 To longu
     
              w = (y * longu) + i
              If w <= lng Then
                tabCle(w) = Mid(strCle, i, 1)
                If tabCle(w) = "" Then
                Else
                      tabCle(w) = Asc(tabCle(w))
                End If
              End If
            Next
          Next
     
          'Cette boucle vas crypter le texte
          For i = 1 To lng
            tabCryptage(i) = Mid(strCrypter, i, 1)
            intTemp = Asc(tabCryptage(i))
            tabAscii(i) = intTemp
            intTemp = Val(tabCle(i))
            tabAscii(i) = tabAscii(i) + intTemp
     
            If tabAscii(i) > 255 Then
              tabAscii(i) = tabAscii(i) - 255
            End If
     
            tabFinal(i) = Chr(tabAscii(i))
            CryptageTxt = CryptageTxt + tabFinal(i)
     
          Next
     
    End Function
    et dans mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    ' CRYPTAGE
        mCrypt.TypeWork = Cryptage
        mCrypt.MotCle = "LOG"
        mCrypt.Texte = Text1
     
        Label1 = mCrypt.ReturnValue
     
    ' DECRYPTAGE
     
        mCrypt.TypeWork = Decryptage
        mCrypt.MotCle = "LOG"
        mCrypt.Texte = Text2
     
        Label1 = mCrypt.ReturnValue
    Voilà une suggestion

  12. #12
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    C'est celle que j'ai utilisé mais en regroupant les lignes de configuration et la variable retournée dans l'appel de la fonction. J'ai également déclaré un enum pour afficher clairement l'action de cryptage ou decryptage dans l'appel de la fonction.

  13. #13
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Hello !

    Ben alors Ricou13, on est sur la même longueur d'ondes 'cryptées' hein

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Protection des applications par un fichier INI
    Par minooo dans le forum Forms
    Réponses: 15
    Dernier message: 08/10/2012, 18h28
  2. [VB6] Manipulation avancé d'un fichier ini
    Par Alvaten dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/03/2007, 15h12
  3. [VB6] Adaptation d'un code avec un fichier ini
    Par batmat86 dans le forum VB 6 et antérieur
    Réponses: 45
    Dernier message: 20/06/2006, 17h08
  4. [VB6] Effacer une clé d'un fichier INI
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 30/05/2006, 14h49
  5. [VB6] Api pour supprimer dans un fichier INI
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/02/2003, 08h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo