Crypter du rtf avec l'algo de vigenere

Soyez le premier à donner votre avis sur cette source.

Vue 5 475 fois - Téléchargée 330 fois

Description

Voici un petit programme qui met en oeuvre l'algorithme de cryptage de Vigenere. Ce programme ne crypte que du RTF (pour l'instant, pour mes besoins perso j'ai du le créer uniquement pour du RTF).

Certaines améliorations doivent être possible (codage du cractère d'échappement '\n' par exemple).

Pour les tests, je joins un fichier .rtf.

Toute remarque constructive est évidemment la bien venue.

A+

Source / Exemple :


////  LE COEUR DU PROGRAMME : /////////////////////////////////////////////////////////

////////////////  FONCTION DE CRYPTAGE / DECRYPTAGE  //////////////////////////////////

CString __fastcall CFonctCryptage::CrypterUneChaine(const CString LaChaine, const CString LaClef) 
{
CString chCrypte("");
CString chif("");

unsigned long LongueurDeLaChaine=LaChaine.GetLength();
unsigned long LongueurDeLaClef=LaClef.GetLength();
unsigned long I=0;
int OffsetTemp=0;;
CString CaractereChaineCourant("");
CString CaractereCleCourant("");

while(I<LongueurDeLaChaine)
{

	CaractereCleCourant=LaClef.GetAt(I%LongueurDeLaClef);
	CaractereChaineCourant=LaChaine.GetAt(I%LongueurDeLaChaine);
// Ce caractère d'échappement '\n' est interprété comme un
// '/' et un 'n' donc 2 caractères Je le remplace par un @
	if(CaractereChaineCourant=='\n' ||CaractereChaineCourant=="@" )  
	{
		chCrypte+="@";
	}
	else 
	{	
		int LOffsetTemp = LOffsetCrypter(	OffsetDuChar(CaractereCleCourant),
						(OffsetDuChar(CaractereChaineCourant)));

		chCrypte+=CaractereDeLOffset(LOffsetTemp);
	}
	I++; 
	//Pour afficher le nombre de caractères en cours de chiffrage :
	chif.Format("%d",I);
	pMonParent->AfficherChiffre(chif);

}

return chCrypte;
}

CString __fastcall CFonctCryptage::DecrypterUneChaine(const CString LaChaine, const CString LaClef)
{

CString chCrypte("");
CString chif("");

unsigned long LongueurDeLaChaine=LaChaine.GetLength();
unsigned long LongueurDeLaClef=LaClef.GetLength();
unsigned long I=0;
int OffsetTemp=0;;
CString CaractereChaineCourant("");
CString CaractereCleCourant("");

	while(I<LongueurDeLaChaine)
	{

		CaractereCleCourant=LaClef.GetAt(I%LongueurDeLaClef);
		CaractereChaineCourant=LaChaine.GetAt(I%LongueurDeLaChaine);
		
		if(CaractereChaineCourant=="@" )
			chCrypte+="\n";

		else 
		{		
			int LOffsetTemp = LOffsetDecrypter(	OffsetDuChar(CaractereCleCourant),
							(OffsetDuChar(CaractereChaineCourant)));

			chCrypte+=CaractereDeLOffset(LOffsetTemp);
		}
		
		I++; 
		//Pour afficher le nombre de caractères en cours de déchiffrage
		chif.Format("%d",I);
		pMonParent->AfficherChiffre(chif);
	}
	return chCrypte;

}
////////////////  FIN DE FONCTION DE CRYPTAGE / DECRYPTAGE  //////////////////////////////////
/********************************************************************************************/

///////////////// FONCTIONS DE CALCUL D'OFFSET DANS LE TABLEAU DE VIGNERE ////////////////////

int __fastcall CFonctCryptage::OffsetDuChar(CString LeCaractere)
{
	int Offset=0;
/////////////////
	// Le modulo correspondant au nombre d'éléments du tableau de Vigenère
	// La variable I permet de gagner un peu de temps dans la boucle
	int I=sizeof(TableChaine)/sizeof(char*);
///////////////////////

	while(LeCaractere!=(CString)TableChaine[Offset%I] && Offset<=I)
	{
		Offset++;
	}
	return Offset;

}

int __fastcall CFonctCryptage::LOffsetCrypter(int OffsetCle,int OffsetChar)
{

	int I=(OffsetCle+OffsetChar)%(sizeof(TableChaine)/sizeof(char*));
	return I;
}

int __fastcall CFonctCryptage::LOffsetDecrypter(int OffsetCle,int OffsetChar)
{

	int I=(OffsetChar-OffsetCle);
	if(OffsetCle>OffsetChar)
		I=I+(sizeof(TableChaine)/sizeof(char*));

	return I;
}

CString __fastcall CFonctCryptage::CaractereDeLOffset(int Offset)
{
	return TableChaine[Offset];
}

///////////////// FIN FONCTIONS DE CALCUL D'OFFSET DANS LE TABLEAU DE VIGNERE ////////////////////

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
comment se fait-il exactement que ça ne crypte que ce format ? on ne peut paz lire tt simplement le fichier ???
cs_thierry la fronde
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
-
Pour l'instant ... je ne sais pas mais je cherche à améliorer la chose.
cs_thierry la fronde
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
-
En fait si.

J'utilise les caractères et non leur code ASCII. Je traite donc des caractères et pas des nombres. De ce fait, tous les caractères d'échappement (non utilisé en RTF) ne sont pas reconnu dans mon programme.
Sous word par ex : '\1' écrit en gras (=1caractère à traiter mon prog y voit 2 caractères \ et 1).

Ce prog fait partie d'un gros projet dans lequel je n'utilise que le format RTF. Je ne me suis donc pas cassé la tête à crypter tous les formats.

Dans mon fichier Table.h Il faudra traiter ces fameux caractères d'échappement.

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.

Du même auteur (cs_thierry la fronde)