Code de cesar (chiffre/déchiffre) en c.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 59 722 fois - Téléchargée 34 fois

Contenu du snippet

Chiffre et déchiffre un fichier texte selon le code de César.

Le code source est en C (dur dur).

Source / Exemple :


// code de cesar

#include <stdio.h>
#include <stdlib.h>

// flush
void flush()
{
	while( getchar() != '\n' )
		continue;
}

// programme principal
int main()
{
	int decalage = 0;
	char nom_fichier[256];
	char choix = 'c';
	// choix
	printf( "Code de Cesar\n" );
	printf( "\nSaisir le décalage : " );
	scanf( "%d", &decalage );
	flush();
	printf( "\nSaisir le nom du fichier : " );
	scanf( "%s", nom_fichier );
	flush();
	printf( "\nChiffrement [c] ou déchiffrement [d] : " );
	scanf( "%c", &choix );
	// synthèse
	switch( choix )
	{
	case 'c' :
		printf("\nVous avez demandé le chiffrement du fichier %s avec un décalage de %d.\n", nom_fichier, decalage );
		{
			int index;
			int taille_fichier = 0;
			FILE * fichier_avant = NULL;
			FILE * fichier_apres = NULL;
			int taille_memoire_tamon = 1024;
			char * memoire_tampon = NULL;
			// allocation
			memoire_tampon = (char*)malloc(taille_memoire_tamon);
			// mise en mémoire tampon
			fichier_avant = fopen( nom_fichier, "r" );
			taille_fichier = fread( memoire_tampon, 1, taille_memoire_tamon, fichier_avant );
			fclose( fichier_avant );
			// chiffrement dans le mémoire tampon
			for( index = 0; index != taille_fichier; ++index )
			{
				// chiffrement des majuscules
				if( memoire_tampon[ index ] >=65 && memoire_tampon[ index ] < 91 )
					memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 65 ) + decalage ) % 26 + 65;
				// chiffrement des minuscules
				if( memoire_tampon[ index ] >=97 && memoire_tampon[ index ] < 123 )
					memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 97 ) + decalage ) % 26 + 97;
			}
			// mise a jour du fichier
			fichier_apres = fopen( nom_fichier, "w" );
			fwrite( memoire_tampon, 1, taille_fichier, fichier_apres );
			fclose( fichier_apres );
			// desallocation
			free( memoire_tampon);
		}
		return 0;
	case 'd' :
		printf("\nVous avez demandé le déchiffrement du fichier %s avec un décalage de %d.\n", nom_fichier, decalage );
		{
			int index;
			int taille_fichier = 0;
			FILE * fichier_avant = NULL;
			FILE * fichier_apres = NULL;
			int taille_memoire_tamon = 1024;
			char * memoire_tampon = NULL;
			// allocation
			memoire_tampon = (char*)malloc(taille_memoire_tamon);
			// mise en mémoire tampon
			fichier_avant = fopen( nom_fichier, "r" );
			taille_fichier = fread( memoire_tampon, 1, taille_memoire_tamon, fichier_avant );
			fclose( fichier_avant );
			// déchiffrement dans le mémoire tampon
			for( index = 0; index != taille_fichier; ++index )
			{
				// déchiffrement des majuscules
				if( memoire_tampon[ index ] >=65 && memoire_tampon[ index ] < 91 )
					memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 65 ) - decalage ) % 26 + 65;
				// déchiffrement des minuscules
				if( memoire_tampon[ index ] >=97 && memoire_tampon[ index ] < 123 )
					memoire_tampon[ index ] = ( ( memoire_tampon[ index ] - 97 ) - decalage ) % 26 + 97;
			}
			// mise a jour du fichier
			fichier_apres = fopen( nom_fichier, "w" );
			fwrite( memoire_tampon, 1, taille_fichier, fichier_apres );
			fclose( fichier_apres );
			// desallocation
			free( memoire_tampon);
		}
		return 0;
	default:
		return -1;
	}
}

Conclusion :


C'est un premier jet pour répondre rapidement à une demande. Je factoriserai certaines protions de code.

A voir également

Ajouter un commentaire Commentaires
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
5 juin 2005 à 17:09
Bonjour,

c'est sympa un petit code sur le cryptage de césar. Suffit qu'on en ait pas assez... Qui se dévoue pour compter le nombre de sources parlant de cryptage affine ??
Le pire, c'est qu'en plus casser ce cryptage est élémentaire...
Cordialement.
jad_raad Messages postés 15 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 6 juin 2005
6 juin 2005 à 00:12
j'ai pas compris en fait le principe de chiffrement et de dechiffrement ,tu peux m'expliquer un peu le but de ton code et j'aurais besoin de savoir le syntaxe du fontion malloc() et à koi ca sert et de la fonction flush().
merci
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
6 juin 2005 à 00:20
Je t'invite à consulter les liens suivans :
* Le code de César : http://www.bibmath.net/crypto/substi/cesar.php3
* La fonction malloc : http://www.opengroup.org/onlinepubs/009695399/functions/malloc.html

La fonction flush vide le buffer d'entrée standard de manière à enchainer les saisies au clavier correctement.
jad_raad Messages postés 15 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 6 juin 2005
6 juin 2005 à 01:15
ok CooL,merci
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
6 juin 2005 à 17:38
Bon, le code est pas trop crade pour ce que j'ai lu (j'ai peut-être laissé passre des erreurs...), mais pourquoi diable coder un CESAR alors qu'il y en a déjà plein et qu'apparament tu connais déjà bien le C ????? Un XOR au moins je sais pas...
Pour info : un César se casse environ en disons 10 minutes, maximum...

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.