Ce code sert a crypter un fichier donné vers un autre fichier cible donné et avec une clef de la longueur que vous voulez(16 à inf bits).
exemple : $cdxor source.txt crypter.txt key
Comme il s'agit d'un cryptage xor, il suffit de faire l'inverse pour decrypter.
exemple : $cdxor crypter.txt source.txt key
Ce cryptage est incassable si la clef est aussi longue (ou plus longue mais seul une partie sera utilisée) que le message (fichier) à coder (cas parfait) et est très dur à casser si la clef est tres longue (se repete le moins possible, car un caractere de la clef code la taille d'un caractere de la source, donc la clef est réutilisée comme ecrite sur un anneau).
Cependant il est possible (mais tres dur) de cracker une clef si on connait le type de fichier (structure identique pour tout les mp3 par exemple), alors evitez de mettre l'extention du fichier source au fichier crypté pour plus de sécurité.
Je n'ai pas géré les erreurs comme celle d'ouverture de fichier car je l'ai codé assez vite...
Mais je vous laisses le faire ;-)
Voila, je suis ouvert a tout commentaires ou toutes questions.
Cryptez bien! :-)
Source / Exemple :
#include <fstream>
#include <iostream>
using namespace std;
void edxor(char*scrfile,char*codfile,char cKey[])
{
int cpt=0,curs=0,length,pos=0;
char * buffer;
bool go=true;
//j'ouvre les deux fichiers source et destination
fstream In(scrfile,ios::in|ios::binary);
fstream Out(codfile,ios::out|ios::binary);
//je recupere la taille du fichier source
In.seekg (0, ios::end);
length = In.tellg();
In.seekg (0, ios::beg);
//gestion affichage
if(length<40)go=false;
//j'alloue la memoire de la taille du fichier
buffer = new char [length];
//je met tout le fichier dans le buffer
In.read (buffer,length);
In.close();
//gestion affichage
cout<<"0% 50% 100%\n";
//boucle qui va effectuer sur chaque caractere le xor
//avec le caractere correspondant de la clef
while(cpt<length)
{
buffer[cpt++]^=cKey[curs++];
if(curs>=strlen(cKey))
curs=0;
//gestion affichage
pos++;
if(go)if(pos>=(length/40))
{
cout<<"#";
pos=0;
}
}
//gestion affichage
if(!go)cout<<"#########################################";
//j'ecrit le buffer qui a subit le xor dans le fichier de destination
Out.write (buffer,length);
Out.close();
}
//$>cdxor infile outfile key
int main(int argv,char ** argc)
{
//test des arguments
if(argv!=4)
cout<<"$>cdxor infile outfile key";
else
{
cout<<" Cryptage xor par B.RENEL\n";
edxor(argc[1],argc[2],argc[3]);
}
return 0;
}
Conclusion :
Le code se compile avec n'importe quel compilo C++ comme g++ par exemple.
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.