Cryptage de base xor pour débutants

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 997 fois - Téléchargée 34 fois

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

Ajouter un commentaire

Commentaires

Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008

A savoir que le cryptage XOR est un cryptage très peu efficace dans un contexte de sécurité. En effet, la clé est de 8bits (logique), il suffit de faire un petit BruteForce rapide pour trouver la solution.
Ce cryptage est donc sympa si vous voulez cacher des infos à votre petit frère et a un but didactique certain, mais c'est tout !!!
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
c=~c;/*Réalise une inversion des bits du caractere*/
c=~c; /* Rotation des bits */
=>on appèle cela le complément(à 1)(1->0 et 0->1)

if (pd!=strlen(clefd)) /* Test de la clef */
{pd+=1;}
=>enlève les crochet et met pd++;

while((c=fgetc(fichier))!=EOF)
=>mauvais utilise plutot feof:
while(!feof(fichier))
{
c=fgetc(fichier);
....
}

if (pd!=strlen(clefd)) /* Test de la clef */
=> calcule la longueur une fois et stocke la dans une variable

test(argv[1],argv[3],argv[2],argv[4]);
=> tu ne sais pas s'il y a quatre argument tu ne vérifie meme pas !!

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.