Cryptage de base xor pour débutants

Contenu du snippet

Ce code a été créé dans le but d'expliquer clairement aux débutants en programmation les bases du cryptage XOR. Pour DOS. Devrait fonctionner sous Linux (non testé).

Source / Exemple :


/*Créé par KGo : http://hacking.cite-du.net/ 
                 just_kgo@hotmail.com
  Ce soft n'a pas été placé sous license car ça ne servirait a rien
  Vous pouvez le distribuer gratuitement, le modifier et meme 
  l'inclure dans des produits commerciaux. Par contre je vous serait
  reconnaissant si vous donnez au moins le nom de l'auteur ainsi qu'un
  lien vers mon site lorsque vous le distribuerez.
  
  Testé avec DEV-C++ sous Windows mais il devrait fonctionner sous
  Linux (non testé) 

  • /
#include <stdio.h> #include <STDLIB.H> #include <string.h> /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ int crypt (char *clefc,char pathc[255],char targetc[255]);/*fonction de cryptage*/ int decrypt (char *clefd,char pathd[255],char targetd[255]);/*decryptage*/ void bann();/*Montre comment utiliser le programme*/ void test(char *fnc,char *cl,char pathg[255],char target[255]);/*permet d'analyser l'entrée en ligne de commande*/ FILE *fichier; /*handle vers le fichier source*/ FILE *dest; /*handle vers le fichier destination*/ /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ int main(int argc, char *argv[]) { /* Vérifie le nombre d'argument en ligne de commande et s'il est exact il les teste pour determiner l'action a faire*/ if (argc==1 || argc==2) bann(); else test(argv[1],argv[3],argv[2],argv[4]); return 0; } /*.................................................................*/ void bann() { puts("\n\t\t<-----------------CrYpTr-------------------->"); puts("\t\t<-----------------v1.0.1-------------------->"); puts("\n\t\t<-----------------By KGo-------------------->"); puts("\t\t<----------just_KGo@hotmail.com------------->\n"); puts("Utilisation :"); puts("CrYpTr -c nom_de_fichier clef Destination : Crypte un ficher"); puts(" -d nom_de_fichier clef Destination : Decrypte le fichier"); puts("Exemple : cryptr -c texte.txt clefsecrete texte2.txt\n"); system("pause"); } /*.................................................................*/ /* Test des valeurs entrées en argument de la ligne de commande */ void test(char *fnc, char *cl, char pathg[255],char target[255]) { if (strcmp(fnc,"-c")==0) crypt(cl,pathg,target); else if (strcmp(fnc,"-d")==0) decrypt(cl,pathg,target); else bann(); } /*.................................................................*/ /* Fonction de cryptage*/ int crypt (char *clefc,char pathc[255],char targetc[255]) { int pd=0;/*initialisation du compteur de la clef*/ int c; int i; if (clefc!=NULL && pathc!=NULL && targetc!=NULL)/* Verification des arguments necessaires*/ { if (fichier=fopen(pathc,"rb"))/* ouverture du fichier source en mode lecture binaire */ { dest=fopen(targetc,"wb");/* ouverture du fichier destination en mode ecriture binaire */ puts("Fichier ouvert\n Encryption en cours..."); while((c=fgetc(fichier))!=EOF)/* En boucle jusqu'a la fin du fichier*/ { c=~c;/*Réalise une inversion des bits du caractere*/ c^=clefc[pd];/* Effectue un XOR sur le caractere avec un caractere de le clef */ fprintf(dest,"%c",c);/* ecrit le caractere dans le fichier */ if (pd!=strlen(clefc))/*test de la clef */ {pd+=1;} else {pd=0;} } puts("Encryption terminée"); fclose(fichier); fclose(dest); } else { puts("Impossible d'ouvrir le fichier"); } } else puts("Argument manquant"); } /*.................................................................*/ /*fonction de decryptage*/ int decrypt (char *clefd,char pathd[255],char targetd[255]) { int pd=0; int c; int i; if (clefd!=NULL && pathd!=NULL && targetd!=NULL) /*Test des arguments necessaires */ { if (fichier=fopen(pathd,"rb"))/* ouverture du fichier source en lecture binaire */ { dest=fopen(targetd,"wb"); /* fichier destination en lecture binaire */ puts("Fichier ouvert\n Decryptage en cours ..."); while((c=fgetc(fichier))!=EOF)/* Boucle tant que le fichier n'a pas été entierement parcouru */ { c^=clefd[pd]; /* applique un XOR sur un caractere avec un caractere de la clef */ c=~c; /* Rotation des bits */ fprintf(dest,"%c",c); /*ecriture dans le fichier destination */ if (pd!=strlen(clefd)) /* Test de la clef */ {pd+=1;} else {pd=0;} } puts("Decryptage terminée"); fclose(fichier); fclose(dest); } else { puts("Impossible d'ouvrir le fichier"); } } else puts("Argument manquant"); } /*.................................................................*/

Conclusion :


Aucune mise à jour n'est encore prévue. Pour plus d'information vous pouvez passer sur mon site : http://hacking.cite-du.net/ . Compilé avec DEV-C++ sous Windows.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.