Bonjour à tous,
J'ai développé un programme pour lequel j'ai besoin de crypter certaines données.
Pour cela, j'ai utilisé la fonction proposée par Maxime Hubiche pour le cryptage et le décryptage.
Ce code fonctionne très bien, les cryptages et décryptages se font sans problème, tant qu'ils restent à l'intérieur des procédures vba.
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 Function Crypter(ByVal chaîneACrypter As String) lLongueur = Len(chaîneACrypter) sLettres = String(lLongueur, Chr(0)) For lBoucle = 1 To NBROTATIONSMAX For lCompteur = 1 To lLongueur Mid(sLettres, lCompteur, 1) = Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) + _ (Asc(Mid(CLEF, (lCompteur Mod Len(CLEF)) + 1, 1)) * lLongueur)) Mod 256) Next chaîneACrypter = sLettres Next 'remplacement de caractères (voir les explications plus loin) sLettres = Replace(sLettres, "'", "µ@%*") sLettres = Replace(sLettres, Chr(34), "=é-ç") Crypter = sLettres End Function '--------------------------------------------------------------------------------------- Function deCrypter(ByVal chaîneAdeCrypter As String) 'restitution des caractères remplacés (voir les explications plus loin) chaîneAdeCrypter = Replace(chaîneAdeCrypter, "=é-ç", Chr(34)) chaîneAdeCrypter = Replace(chaîneAdeCrypter, "µ@%*", "'") lLongueur = Len(chaîneAdeCrypter) sLettres = String(lLongueur, Chr(0)) For lBoucle = 1 To NBROTATIONSMAX For lCompteur = 1 To lLongueur Mid(sLettres, lCompteur, 1) = Chr((((Asc(Mid(chaîneAdeCrypter, lCompteur, 1)) - _ (Asc(Mid(CLEF, (lCompteur Mod Len(CLEF)) + 1, 1)) * lLongueur)) Mod 256) + 256) Mod 256) Next chaîneAdeCrypter = sLettres Next deCrypter = sLettres End Function
Mais voila, si on crypte des données, c'est pour les sauvegarder afin de pouvoir les réutiliser plus tard.
Et c'est là que ça coince.
De manière apparemment aléatoire, il arrive que la chaine cryptée soit tronquée à la copie dans la cellule de destination (caractères manquants en fin de chaine), ce qui bien entendu fausse le décryptage et fait bugger le programme.
J'ai pensé qu'il pouvait s'agir de caractères spéciaux du genre apostrophe (c'est de toute manière le cas en début de chaine) ou guillemet qui pouvaient générer des erreurs d'interprétation par Excel au moment de la copie dans la cellule. J'ai donc remplacé ces caractères par des chaines identifiables (voir le code) mais ça ne change rien.
Il y a peut-être d'autres caractères qui pourraient poser problème, mais je ne les connais pas et je ne vais pas m'amuser à faire des remplacements pour tous les caractères ascii de la table.
Je suis un peu perplexe face à ce souci. Je dois passer à côté d'un truc évident mais je ne vois pas ce qui coince et si quelqu'un a une idée ou a été confronté au même problème, je suis preneur.
D'avance merci,
Michel
Partager