Besoin d'un déblocage pour ce code en C
steftou
-
steftou -
steftou -
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
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:
- Besoin d'un déblocage pour ce code en C
- Code ascii - Guide
- Deblocage telephone - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
Salut,
Voilà pour ta fonction lecture,
J'ai fait ça à l'arrache et j'ai pas testé les valeurs de retour x)
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)