Bonjour,
Cela fait quelques temps que je n'avais rien posté sur Developpez. A titre perso, je travaille sur un jeu vidéo (avec Delphi bien-sûr).
Je vous propose un petit exemple simple de chiffrage/déchiffrage d'une chaine de caractères. Ce n'est pas un chiffrage compliqué, mais vous pouvez complexifier comme vous le souhaitez.
La méthode de chiffrage va, pour chaque caractères de la chaine, récupérer son code ASCII, lui ajouter du sel (un entier positif) et calculer le carré. La valeur numérique obtenue est issue du code ASCII du caractère mais assez différente pour éviter de faire le rapprochement trop vite. Cette valeur est alors convertie en string suivie d'un espace (qui sert de caractère séparateur entre chaque caractère "chiffré"). Vous devez ajouter l'unité Math dans les uses pour utiliser l'exemple.
La méthode pour déchiffrer fait simplement le traitement inverse. On parcourt la chaine de caractère chiffrée jusqu'à trouver le séparateur afin de récupérer un à un les codes de caractères. Une fois que l'on a un code, on fait le traitement mathématique inverse de celui appliqué lors du chiffrement (il faut évidemment que le "sel" soit le même que celui utilisé lors du chiffrement). Dans l'exemple, on calcule la racine carrée du code chiffré et on lui enlève le sel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function chiffrerChaine(uneChaine : string; sel : word): string; begin for var c in uneChaine do begin var rValeur := power(ord(c) + sel, 2); result := result + FloatToStr(rValeur) + ' '; end; end;
En l'état c'est très simple ça ne résistera pas longtemps à un hacker mais c'est un exemple qui fait le job. Vous pouvez évidemment faire un traitement mathématique plus compliqué pour générer un code à partir du code ASCII du caractère. Il faudra alors évidemment adapter la méthode de déchiffrement.
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 function dechiffrerChaine(uneChaine : string; sel : word): string; begin var sDec := ''; for var c in uneChaine do begin if c <> ' ' then sDec := sDec + c else begin if not(sDec.IsEmpty) then begin var rValeur := sqrt(StrToInt64(sDec)); var sTemp := FloatToStr(rValeur); result := result + chr(StrToInt(sTemp) - sel); sDec := ''; end; end; end; end;
Partager