Besoin d'un déblocage pour ce code en C

Fermé
steftou - 17 sept. 2009 à 22:35
 steftou - 18 sept. 2009 à 00:38
Bonsoir à tous, j'ai un problème sur mon code dont le but est de crypter et decrypter un fichiertexte. Pour ce fait, j'ai utilisé le cryptage symétrique. Mais le problème est que lorsque je crypte mon fichier, je n'arrive plus à le décrypter pourtant la console m'affiche texte decrypter. De plus mon code pour afficher le texte ne fonction pas. Alors s'il vous plait aider moi.

Voici mon code:


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

// Programme principal

main()
{

// Déclaration des variables

char fichier[128] ;
int choix = 0 ;
char continu = 1 ;

// Déclaration des fonctions

void lecture( char lire[128] ) ;
void crypter( char crypt[128] ) ;
void decrypter( char decrypt[128] ) ;


////////////////////////////////////////////////////////

// Entrer du fichier avec son chemin

printf( "\nFichier : " ) ;
scanf( "%s" , &fichier ) ;

// Boucle principale

while ( continu == 1 )
{

system("cls") ;
printf( "\nCryptage IUT1 GEII Projet XX9" ) ;
printf( "\nVersion Beta 1.2\n" ) ;
printf( "\n\nfichier : %s",fichier ) ;
printf( "\n\nFonctions :" ) ;
printf( "\n\n(1) Lire le fichier" ) ;
printf( "\n(2) Cryptage" ) ;
printf( "\n(3) Decryptage" ) ;
printf( "\n(4) Exit" ) ;
printf( "\n\nChoix : " ) ;

choix = 0 ;

choix = getchar() ;

// On lance la fonction choisie

switch (choix)
{
case 49 :
lecture( fichier ) ;
break;
case 50 :
crypter( fichier ) ;
break;
case 51 :
decrypter( fichier ) ;
break;
case 52 :
continu = 0 ;
break;
}
printf( "\n" ) ;
}

printf( "\n\nRetour au dos\n" ) ;


}

////////////////////////////////////////////////////////

// Les fonctions

////////////////////////////////////////////////////////

// Fonction affichage du fichier

void lecture( char lire[128] )
{
char compteur_car ;
char compteur_ligne ;
char car_lect ;
FILE *fp_lect ;

// Ouverture du fichier en lecture

fp_lect = fopen( lire , "r" ) ;
compteur_car = 0 ;
compteur_ligne = 0 ;

system ("cls") ;
printf ( "Lecture du fichier\n\n" ) ;

// On affiche le fichier par écrans de 17 lignes

while ( ( car_lect = fgetc( fp_lect ) ) != EOF )
{
compteur_car ++ ;
printf( "%c" , car_lect ) ;
if ( car_lect == 10 )
{
compteur_car = 0 ;
compteur_ligne ++ ;
}
if ( compteur_car >= 80 )
{
compteur_car = 0 ;
compteur_ligne ++ ;
}
if ( compteur_ligne >= 17 )
{
compteur_car = 0 ;
compteur_ligne = 0 ;
printf( "\n<Press Key>\n" ) ;

car_lect = getch() ;
system("cls") ;
printf ( "Lecture du fichier\n\n" ) ;
}
}

// Fermeture du fichier

fclose( fp_lect ) ;

}

////////////////////////////////////////////////////////

// Fonction de cryptage

void crypter( char crypt[128] )
{
int car1 ;
int code1 ;
int hasard1 ;
int tmp1 ;
char cmpt1 ;
FILE *fp1 ;
FILE *fp1_tmp ;


// On demande une clef

printf( "\n\nClef (0-2^16) : " ) ;
scanf( "%i" , &code1 ) ;

//On initialise le générateur aléatoire et on prend une valeur au hasard

time( &tmp1 ) ;
srand( tmp1 ) ;
tmp1 = hasard1 / 256 ;
hasard1 = hasard1 - (256 * tmp1);

//Ouverture du fichier en lecture

fp1 = fopen( crypt , "r" ) ;

// Ouverture du fichier file.tmp en écriture

fp1_tmp = fopen( "file.tmp" , "w" ) ;

// On sauve hasard dans le fichier pour le décryptage

fputc( hasard1 , fp1_tmp ) ;
cmpt1 = 0 ;

while ( ( car1 = fgetc( fp1 ) ) != EOF )
{
cmpt1 ++ ;

// On additionne selon le compteur 'cmpt1'

switch (cmpt1)
{
case 1 :
car1 = car1 + code1 ;
break;
case 2 :
car1 = car1 + hasard1 ;
break;
case 3 :
car1 = car1 + hasard1 +code1 ;
cmpt1 = 0 ;
break;
}

// On remet 'car1' entre 0 et 255 (valeur min et max d'un octet) et on le sauve dans 'file.tmp'

tmp1 = car1 / 256 ;
car1 = car1 - (256 * tmp1);
fputc( car1 , fp1_tmp ) ;
}

// Fermeture des fichiers et on renomme le fichier .tmp

fclose( fp1_tmp ) ;
fclose( fp1 ) ;

remove( crypt ) ;
rename( "file.tmp" , crypt ) ;

printf( "\nCryptage terminer\n" ) ;
getch() ;
}

////////////////////////////////////////////////////////


//Fonction de décryptage

void decrypter( char decrypt[128] )

{
int car2 ;
int code2 ;
int hasard2 ;
int tmp2 ;
char cmpt2 ;
FILE *fp2 ;
FILE *fp2_tmp ;

//On demande une clef

printf( "\n\nClef (0-2^16) : " ) ;
scanf( "%i" , &code2 ) ;

//Ouverture des fichiers

fp2 = fopen( decrypt , "r" ) ;
fp2_tmp = fopen( "file.tmp" , "w" ) ;

//On lit la valeur prise au hasard au cryptage

hasard2 = fgetc( fp2 ) ;

while ( ( car2 = fgetc( fp2 ) ) != EOF )
{
cmpt2 ++ ;

//On soustrait selon le compteur 'cmpt2'

switch (cmpt2)
{
case 1 :
car2 = car2 - code2 ;
break;
case 2 :
car2 = car2 - hasard2 ;
break;
case 3 :
car2 = car2 - hasard2 - code2 ;
cmpt2 = 0 ;
break;
}

//On remet 'car2' entre 0 et 255 (valeur min et max d'un octet) et on le sauve dans 'file.tmp'

if ( car2 < 0 )
car2 = 0 - car2 ;
tmp2 = car2 / 256 ;
car2 = car2 - (256 * tmp2);
fputc( car2 , fp2_tmp ) ;
}

//Fermeture des fichiers et on renomme le fichier .tmp

fclose( fp2_tmp ) ;
fclose( fp2 ) ;

remove( decrypt ) ;
rename( "file.tmp" , decrypt ) ;

printf( "\nDecryptage terminer\n" ) ;
getch() ;
}

// Fin
A voir également:

2 réponses

Wardog Messages postés 389 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 17 octobre 2009 159
17 sept. 2009 à 23:20
Salut,

Voilà pour ta fonction lecture,

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

// Fonction affichage du fichier

int lecture( char lire[128] )
{
    void *contenu;
    struct stat infos;
    int fd;

    system ("cls") ;
    printf ( "Lecture du fichier %s\n\n", lire ) ;

    // Ouverture du fichier en lecture seule
    fd = open(lire, O_RDONLY);

    //On recupere les infos du fichier dont la taille
    fstat(fd, &infos);

    // je malloc de la taille du fichier :P
    contenu = malloc(infos.st_size);

    //Je lis le fichier et je stocke tout ca dans contenu
    read(fd, contenu, infos.st_size);

    // j affiche sur la sortie standard contenu
    write(1, contenu, infos.st_size);

    puts("\n");
    free(contenu);
    close(fd);
    system("pause");
}


J'ai fait ça à l'arrache et j'ai pas testé les valeurs de retour x)
0
slt wardog et merci ! pour la fonction lecture par contre j'ai encore du mal avec ma fonction décryptage.
0