begin process at 2012 05 27 15:18:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > CRYPTER DU RTF AVEC L'ALGO DE VIGENERE

CRYPTER DU RTF AVEC L'ALGO DE VIGENERE


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Niveau :Débutant Date de création :06/10/2004 Vu / téléchargé :4 006 / 186

Auteur : thierry la fronde

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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

  • //// 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 ////////////////////
////  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 ////////////////////


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CURSEUR CHANGEANT SUR FOCUS DE BOUTON

 Sources de la même categorie

PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source avec une capture CRYPTOSYSTÈME ELGAMAL LIBRAIRIE GMP par louelh95
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR-IP par antho974

Commentaires et avis

Commentaire de coucou747 le 07/10/2004 19:05:51 administrateur CS

comment se fait-il exactement que ça ne crypte que ce format ? on ne peut paz lire tt simplement le fichier ???

Commentaire de thierry la fronde le 08/10/2004 10:25:56

Pour l'instant ... je ne sais pas mais je cherche à améliorer la chose.

Commentaire de thierry la fronde le 08/10/2004 11:20:02

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.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales