Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2006, 19h35   #1
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413
Par défaut [Source] Cryptage des données

La commande Options Sécurité Coder/Décoder une base de données ne protège pas les données. Elle permet simplement d'éviter la lecture de la bdd à partir d'un éditeur de textes. Toutes les données du fichier .MDB crypté de cette manière restent accessibles via le Jet Engine. D'autre part, il est très rare que toutes les données soient confidentielles. Il est par conséquent trop onéreux de protéger toutes les données en implémentant la sécurité au niveau du groupe de travail. Il faut donc appliquer une technique de cryptage personnalisée simple, permettant de protéger suffisamment bien les données confidentielles quelles soient numériques ou alphabétiques. Le niveau de protection assuré doit en somme donner beaucoup de difficultés à un pirate pour casser le code. La technique présentée ci-après ne nécessite pas une clé externe, susceptible d'être perdue, ce qui rendrait les données indéchiffrables.
Pour obtenir un code, qui ne peut pas être cassé par une analyse de fréquence d'apparition des caractères, il faut recourir à un algorithme qui autorise les substitutions multiples d'un caractère. A cet effet, on peut utiliser la rotation variable dont le principe est expliqué ci-après.
Dans ce cas, la valeur du 1er signe est augmentée d'une valeur N, celle du 2ème est augmentée de N-1, celle du 3ème de N-2 et ainsi de suite jusqu'à zéro. Puis on recommence à ajouter 1, 2, ……, N-2, N-1 et N.
Dans notre code N = 7.
Exemples: fonction pour crypter et son corollaire pour décrypter

Code :
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
 
Option Compare Database
Option Explicit
 
Public Const CYCLE = 7
 
Public Function Coder(chaine As String) As String
Dim strTemp As String '*** contiendra la résultat du cryptage caractère par caractère.
Dim i As Long '*** compteur de caractères du texte à protéger
Dim q As Integer '*** stockage de la valeur ASCII
Dim pt As String * 1 '*** texte normal à protéger
Dim ct As String * 1 '*** texte chiffré
Dim z As Integer '*** valeur du cycle de rotation
Dim Step As Integer '*** pas d'incrémentation négatif ou positif
 
z = CYCLE
Step = -1
For i = 1 To Len(chaine)
     pt = Mid(chaine, i, 1)
     q = Asc(pt)
     Select Case q
        Case Asc("A") To Asc("Z") '***Majuscules
           q = q + z
           If q > Asc("Z") Then
              q = 64 + (q - Asc("Z"))
           End If
           ct = Chr(q)
       Case Asc("a") To Asc("z") '***Minuscules
          q = q + z
          If q > Asc("z") Then
             q = 96 + (q - Asc("z"))
          End If
          ct = Chr(q)
      Case Else
     '***Ponctuation et chiffres:
          ct = Chr(q + z)
     End Select
     z = z + Step
     If z < 0 Then '***Démarre l'incrémentation positive
         z = 1
        Step = 1
     End If
     If z > CYCLE Then '***Démarre l'incrémentation négative
        z = CYCLE - 1
        Step = -1
     End If
     strTemp = strTemp & ct
Next i
Coder = strTemp
End Function
 
Public Function DeCoder(chaine As String) As String
Dim strTemp As String
Dim i As Long
Dim ct As String * 1 '*** texte chiffré
Dim pt As String * 1 '*** texte normal
Dim q As Integer
 
Dim z As Integer
Dim Step As Integer
z = CYCLE
Step = -1
For i = 1 To Len(chaine)
   ct = Mid(chaine, i, 1)
   q = Asc(ct)
   Select Case q
      Case Asc("A") To Asc("Z")
         '***Majuscules
         q = q - z
         If q < Asc("A") Then
            q = Asc("Z") - (64 - q)
         End If
         strTemp = strTemp & Chr(q)
      Case Asc("a") To Asc("z")
         '***Minuscules
         q = q - z
         If q < Asc("a") Then
            q = Asc("z") - (96 - q)
         End If
         strTemp = strTemp & Chr(q)
      Case Else
      '***Ponctuation et chiffres:
         strTemp = strTemp & Chr(q - z)
   End Select
   z = z + Step
   If z < 0 Then
      z = 1
      Step = 1
   End If
   If z > CYCLE Then
      z = CYCLE - 1
      Step = -1
   End If
Next i
DeCoder = strTemp
End Function
Bien entendu on peut aussi changer le pas d'incrément. On pourrait aussi renoncer à crypter tous les caractères, mais seulement 4 sur 5 par exemple..
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2006, 19h37   #2
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413
Autre possibilité que j'utilise

Pour protéger ce type de données contre les assauts de pirates expérimentés, il faut les transformer à l'aide d'un algorithme travaillant au niveau de chaque bit. La technique proposée est d'appliquer l'opérateur booléen du Ou Exclusif (XOR) à la valeur binaire ASCII de chaque caractère des données à crypter, sur la base d'une phrase clé comportant le plus de signes différents (lettres, chiffres, signes de ponctuation). On a donc deux arguments en entrée de cet opérateur qui va produire un résultat: les données cryptées. Cet opérateur se prête particulièrement bien au cryptage car il est complètement réversible et symétrique. Il suffira donc d'appliquer le même algorithme avec la même phrase clé au texte crypté pour obtenir le texte normal d'origine. D'autre part, ce qui le rend difficile à décoder est le fait qu'on obtient le même résultat, dont la plupart des signes sont non affichables, à partir de nombreuses données différentes. Un pirate ne doit pas seulement connaître la valeur numérique des données cryptées, mais en plus il doit connaître la valeur binaire de la phrase clé.
Dans un module standard, on place la fonction de cryptage suivante:

Code :
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
 
Public Function XOREncrypt(strTexteNormal As Variant, strPhraseClé As String)As String ' Objectif: Encryptage via l'addition booléenne Ou Exclusif au niveau de chaque bit du texte ' à crypter et du texte d'une phrase clé selon leur valeur ASCII. Dim lngLongueurPhraseClé As Long
Dim i As Long ' Pour contrôler la boucle dans le texte normal à crypter
Dim intMasque As Integer
Dim lngPosCar As Long ' Pour contrôler la boucle dans la phrase clé
lngLongueurPhraseClé = Len(strPhraseClé)
If IsNull(strTexteNormal) Or lngLongueurPhraseClé = 0 Then 
XOREncrypt = vbNullString
Exit Function
End If
For i = 1 To Len(strTexteNormal)
'Boucle à travers la phrase clé, réinitialise le compteur d'itérations quand on
'atteint la fin de la phrase clé qui est en général plus courte que le texte à crypter: 
lngPosCar = lngPosCar + 1
If lngPosCar > lngLongueurPhraseClé Then 
lngPosCar = 1
End If
'Détermine la valeur ASCII des caractères du masque de cryptage à partir de la phrase clé:
intMasque = Asc(Mid(strPhraseClé, lngPosCar, 1))
'Remplace un caractère du texte normal par son équivalent du masque XOR:
Mid(strTexteNormal, i, 1) = _
Chr(Asc(Mid(strTexteNormal, i, 1)) Xor intMasque)
Next i
'Retourne la chaîne cryptée:
XOREncrypt = strTexteNormal
End Function
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h03.


 
 
 
 
Partenaires

Hébergement Web