Cryptage de fichier avec la fonction xor sur n bits

Contenu du snippet

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.

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.