Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Cryptage

Présentation

Le cryptage également appelé codage sert à coder des données qui ne veut soit ne pas être vue ou soit ne veut pas être modifier. Cela signifie que les données sont modifiées par un algorithme plus ou moins complexe de tel sorte qu'elles deviennent incompréhensible.

Dans ce tutorial, nous nous intéresserons plus particulièrement au cryptage de chaine de caractères.
Le cryptage est utilisé pour garder des données secrètes comme par exemple un mot de passe lors d'une authentification ou encore l'utilisation restreind d'un ordianteur ou d'une application.


Pourquoi crypter ?

Pour assurer la sécurité des données, il est nécessaire d'avoir recours au cryptage.

Pour vous montrer, pourquoi crypter vos données, nous allons prendre un petit exemple en Delphi avec l'utilisation du composant TLabel.

Créez une nouvelle application en Delphi. Insérez un TLabel dans la fiche (form). Ecrivez dans son caption "delphi". Ouvrez l'explorateur Windows. Ensuite sur le fichier d'exécution de votre programme, cliquez sur le bouton droit de la souris et appuyez sur la touche "Shift" du clavier en même temps. Un menu apparait, puis cliquez sur "Ouvrir avec...". Choisissez "WordPad" et cliquez sur le bouton "OK".

Vous voilà maintenant sur "WorPpad". Allez dans le menu "Edition" et cliquez sur "Rechercher". Entrez "delphi" puis cliquez sur le bouton OK. "delphi" est alors sélectionné.

Cela indique qu'il est particulièrement facile de retrouver du texte (dans notre exemple "delphi") et donc de le modifier grâce à un logiciel spécifique. Ces logiciels permettent de changer certaines données d'un programme comme par exemple le texte d'un composant TLabel.



Comment crypter ?

Pour pallier au problème de sécurité de données que rencontre beaucoup de développeurs, il suffit d'effectuer un cryptage sur les données dit "sensibles".

Il existe beaucoup de type de cryptage très différents les uns des autres, allant de l'utilisation du simple opérateur "XOR" à l'utilisation d'un algorithme complexe.

Dans la suite, nous verrons différentes méthodes pour crypter une chaine de caractères en Delphi.



Crypter du texte en utilisant les caractères ASCII

Pour commencer, je vous propose une solution relativement simple à mettre en place utilisant les caractères ASCII (American Standard Code for Information Interchange). Cette méthode est principalement employée pour ne pas trouver une chaine de caractères dans un programme. Cette méthode n'est pas une méthode de cryptage à proprement dites et il est donc assez facile de retrouver le texte.

Ajouter un composant TLabel au nouveau projet.

procedure TForm1.Button1Click(Sender: TObject);
var
phrase,Decrypt:string;
int:integer;
begin
phrase:=#100+#101+#108+#112+#104+#105; //Correspond aux caractères ASCII
Decrypt:=''; //Initialise la variable
for int:=1 to 6 do //6 caractères
Decrypt:=Decrypt+CHR(ORD(phrase[int]));
Label1.Caption:=Decrypt; //Affiche le résultat dans un label
end;


"#100+#101+#108+#112+#104+#105" est le code ASCII de "delphi".
La fonction "CHR" permet de renvoyer le caractère correspondant à une valeur ASCII.
La fonction "ORD" permet de renvoyer la valeur scalaire d'une expression de type scalaire

Pour vérifier, essayez de rechercher la chaine de caractères "delphi" avec le logiciel "WordPad" dans le programme. Un message vous renseigne alors que la recherche est terminée et n'a rien trouvée.

Cryptage    [ 27-01-2004 ]
 Exemple de cryptage d'un texte avec le code ASCII.
Télécharger :  [5 Ko] [Télécharger cryptascii.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/


Crypter du texte avec l'opérateur XOR

L'opérateur XOR (OU exclusif) est sans doute le type de cryptage le plus connu à travers le monde. Il n'en reste pas moins assez sûr. Il existe de nombreuses méthodes de cryptage utilisant l'opérateur XOR mais le principe de fonctionnement reste le même.

Une clé est utilisée plus ou moins grande. On effectue l'opération XOR entre cette clé et chaques caractères du texte à crypter. On peut aussi décaler la clé à droite bit à bit grâce à l'opérateur "SHR". Une variante consiste également à modifier la clé pour chaques caractères du texte à crypter.

La particularité de l'opérateur XOR est que l'on peut retrouver la valeur de départ à partir du résultat.

Voici la table de vérité du XOR :

Entrée 1
Entrée 2
Sortie
0
0
0
0
1
1
1
0
1
0
0
0

Par exemple le nombre binaire "0101" sera notre clé. On appelle cette clé, une clé unique.
On va coder un grâce à cette clé, le nombre binaire "1001".

0101 xor 1001=1100

Grâce à ce résultat "1100", on pourra retrouver le nombre binaire de départ en connaissant la clé, c'est à dire "1001" :
0101 xor 1100=1001

Pour illustrer comment utiliser l'opérateur XOR, nous allons créer un exemple.
Créer un nouveau projet Delphi. Ajouter deux composants TGroupBox, TLabel, TButton et quatre composants TEdit.



Ensuite, nous allons créer le cryptage et le décryptage. Chaque caractères de la chaine seront cryptés grâce à une cl. On effectue également un décalage à droite de 8 bits de la clé.

function CryptDeCrypt(St:string;Key:integer):string;
var i:byte;
StCrypt:string;
begin
StCrypt:=''; //Initialise la variable
for i:=1 to Length(St) do //Pour tous les caractères de notre chaine...
StCrypt:=StCrypt+Char(Byte(St[i]) xor Key shr 8); //...On effecute le cryptage
result:=StCrypt; //Renvoie le résultat
end;


Maintenant, il ne reste plus qu'à faire appel à cette fonction.

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=CryptDeCrypt(Edit1.Text,1234); //Appel la fonction en passant en paramètre le texte à crypter et la clé
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit4.Text:=CryptDeCrypt(Edit3.Text,1234);
end;


"1234" est notre clé unique. Pour retrouver le texte de départ, le, il faut connaitre cette clé.

Cryptage    [ 31-01-2004 ]
 Exemple de cryptage d'un texte avec l'opérateur XOR.
Télécharger :  [6 Ko] [Télécharger cryptxor.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/


Crypter du texte avec la fonction MD5

La fonction "MD5" est très connu dans le langage de programmation PHP puisque l'on utilise pour crypter du texte comme par exemple un mot de passe lors d'une authentification.

Nous allons exposer deux méthodes pour crypter du texte avec la fonction MD5.
La première méthode consiste à utiliser les composants de cryptage DCPcrypt de Dave Barton. Ces composants permettent de crypter du texte ou un fichier complet dans de nombreux algorithmes.

Créez un nouveau projet Delphi. Ajoutez un composant TGroupBox, deux TLabel, deux TEdit, un TButton et le composant TDCP_md5. Pour installer ce dernier composant sous Delphi, il suffit d'ouvrir le fichier "DCPdelphiX.dpk" (le "X" correspond à la version de Delphi). Ensuite, compilez et installez ce paquet.



Pour commencer, vous devez initialiser l'algorithme, puis lui indiquer la chaine à cryptée. La chaine de caractères est cryptée sous 16 bits.

Uses DCPcrypt2, DCPmd5;

procedure
TForm1.Button1Click(Sender: TObject);
Var StACrypt,StCrypt:String;
Digest: array[0..15] of byte;
i:integer;
begin
StACrypt:=Edit1.Text; //Texte à crypter
DCP_md51.Init;
DCP_md51.UpdateStr(StACrypt);
DCP_md51.Final(Digest);
StCrypt:='';
for i:=0 to 15 do
StCrypt:=StCrypt+IntToHex(Digest[i],2);
Edit2.Text:=StCrypt; //Texte crypté
end;


La fonction "IntToHex" convertit un nombre en une chaîne contenant la représentation hexadécimale de ce nombre. La valeur "2" indique le nombre minimum de chiffres hexadécimaux à renvoyer.

Cryptage    [ 28-01-2004 ]
 Exemple de cryptage d'un texte avec la fonction MD5.
Télécharger :  [6 Ko] [Télécharger cryptmd5.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/

La deuxième méthode consiste à utiliser l'unité "md5.pas" que vous pouvez trouver sur le site de Matthias Fichtner.

Créez un nouveau projet Delphi. Ajoutez un composant TGroupBox, deux TLabel, deux TEdit, et un TButton. Enregistrez votre projet et mettez l'unité "md5.pas" dans le même répertoire que votre programme.



Il n'est pas nécesaire ici de préciser le nombre de bits.

Uses md5;

procedure TForm1.Button1Click(Sender: TObject);
var StACrypt,StCrypt:String;
Digest:MD5Digest;
begin
StACrypt:=Edit1.Text; //Texte à crypter
Digest:=MD5String(StACrypt);
StCrypt:=MD5Print(Digest);
Edit2.Text:=StCrypt; //Texte crypté
end;


"MD5String" convertit la chaine de caractères et "MD5Print" permet d'afficher le résultat.

Cryptage    [ 28-01-2004 ]
 Exemple de cryptage d'un texte avec la fonction MD5.
Télécharger :  [9 Ko] [Télécharger cryptmd52.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/

Tous droits réservés - Contacts
Haut de la page