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.
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.