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
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..
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 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
Partager