Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1296 connectés 

  FORUM HardWare.fr
  Programmation
  C

  cryptage de fichier avec XOR

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

cryptage de fichier avec XOR

n°851735
_ky_
Posté le 16-09-2004 à 14:27:24  profilanswer
 

hello,  
j'ai un pitit problème sur un programme:
 
le but du prog, est d'ouvrir un fichier, de le crypter et de mettre le resultat dans un autre fichier.
une autre fonction fait le travail inverse (ouvre le fichier illisible, le decrypte et le met dans un troisieme fichier)
 
ça fonctionne si le contenu du fichier est inferieur à la taille du buffer, mais sinon, ben ça merde àla fin de la premiere boucle.
 
Je pense que ça foire dans le decryptage, enfin je suis pas sur :/
 
 
ha ouai, sinon j'utilise un cryptage avec XOR et la taille de mon buffer est de la même taille que ma clé.
 
 
 

Code :
  1. int crypt_mail(char *file_name)
  2. {
  3. FILE *fd;
  4. FILE *fd_2;
  5. char buf[BUF_SIZE];
  6. char tmp[BUF_SIZE];
  7. int  i;
  8. int  j;
  9. if ((fd = fopen(file_name, "r+b" )) == 0) //ouvre en lecture binaire
  10.  return (1);
  11. /*move_to_cpt change le nom du fichier de *.txt à *.cpt*/
  12. if ((fd_2 = fopen(move_to_cpt(file_name), "a+b" )) == 0)
  13.  return (2);
  14. while (i = fread(&buf, sizeof(char), BUF_SIZE, fd))
  15.  {
  16.   buf[i] = '\0';
  17.   for (j = 0; buf[j];j++)
  18.    tmp[j] ^= buf[j];
  19.   tmp[i] = '\0';
  20.   //on ecrit le buff encodé dans le nouveau fichier
  21.   fprintf(fd_2, "%s", tmp);
  22.  }
  23. fclose(fd);
  24. fclose(fd_2);
  25. return (0);
  26. }
  27. int decrypt_mail(char *file_name)
  28. {
  29. FILE *fd;
  30. FILE *fd_2;
  31. char buf[BUF_SIZE];
  32. char tmp[BUF_SIZE];
  33. int  i;
  34. int  j;
  35. if ((fd = fopen(file_name, "r+b" )) == 0)
  36.  return (1);
  37. if ((fd_2 = fopen("decrypt.txt", "a+b" )) == 0)
  38.  return (2);
  39. while (i = fread(&buf, sizeof(char), BUF_SIZE, fd))
  40.  {
  41.   buf[i] = '\0';
  42.   for (j = 0; j != i; j++)
  43.    tmp[j] ^= buf[j];
  44.   tmp[j] = '\0';
  45.   fprintf(fd_2, "%s", tmp);
  46.  }
  47. fclose(fd);
  48. fclose(fd_2);
  49. return (0);
  50. }


 
 
 
voila, si quelqu'un à de l'inspiration qu'il m'en fasse part  
 
 :hola:

mood
Publicité
Posté le 16-09-2004 à 14:27:24  profilanswer
 

n°851761
_ky_
Posté le 16-09-2004 à 14:54:57  profilanswer
 

bon, en fait j'ai trouvé mes erreurs  
 
 
j'ai remplace le fprintf par un write, et me suis  apperçut que j'utilisais pas ma clé  :sweat:  
 
 
 
enfin la ça fonctionne.
 :bounce:  
 
merci encore :)
 
juste pour info, le code :
 

Code :
  1. int crypt_mail(char *file_name)
  2. {
  3. FILE *fd;
  4. FILE *fd_2;
  5. char buf[BUF_SIZE];
  6. char tmp[BUF_SIZE];
  7. int  i;
  8. int  j;
  9. if ((fd = fopen(file_name, "r+b" )) == 0) //ouvre en lecture binaire
  10.  return (1);
  11. if ((fd_2 = fopen(move_to_cpt(file_name), "a+b" )) == 0)
  12.  return (2);
  13. while (i = fread(&buf, sizeof(char), BUF_SIZE, fd))
  14.  {
  15.   buf[i] = '\0';
  16.   for (j = 0; buf[j];j++)
  17.    tmp[j] = buf[j] ^ key[j];
  18.   tmp[i] = '\0';
  19.   //on ecrit le buff encodé dans le nouveau fichier
  20.   fwrite(&tmp, sizeof(char), j, fd_2);
  21.   //fprintf(fd_2, "%s", tmp);
  22.  }
  23. fclose(fd);
  24. fclose(fd_2);
  25. return (0);
  26. }

n°851881
Taz
bisounours-codeur
Posté le 16-09-2004 à 16:49:31  profilanswer
 

pourquoi tu utilise 2 buffers différents ?
utilise NULL au lieu de 0
utilise l'opérateur sizeof quand tu le peux
quand à ton code il est incorrect, si ton fichier contient un 0, tu vas tout arrêter pour rien

n°851922
_ky_
Posté le 16-09-2004 à 17:22:58  profilanswer
 

J'ai utilisé 2 buffer différents sans faire gaffe, mais c'est vria qu'un seul suffit.
Pourquoi utiliser null si j'aime utiliser 0?
jvois pas trop le problème avec sizeof
et enfin je crypte un fichier texte, donc il ne devrait pas y avoir de 0 (si je ne m'abuse)

n°851939
Taz
bisounours-codeur
Posté le 16-09-2004 à 17:30:46  profilanswer
 

y a pas de 0 en ascii mais à part ça ...
 
t'as pas à aimer 0, un pointeur nul en C, c'est NULL, de type (void*) et rien d'autre. sinon, tu vas voir comment ça va chier sur machine ou sizeof(void*) != sizeof(int), tu vas pleurer ...

n°851949
_ky_
Posté le 16-09-2004 à 17:37:14  profilanswer
 

t'entend quoi par "ya pas de 0 en ascii"?
 
et ou est-ce que tu veux que j'utilise null et pourquoi?

n°851987
Taz
bisounours-codeur
Posté le 16-09-2004 à 17:59:49  profilanswer
 

1) l'octet 0 est utilisé dans certaines représentations de texte
2) parce que 0 est de type entier et pas de type void*. de toute évidence tu ne le sais pas et ne comprends les implications ...

n°852063
_ky_
Posté le 16-09-2004 à 19:25:16  profilanswer
 

1) ok
2)ouai, j'avait tilté pour le type, mais c'est quoi les implications justement ?

n°852070
Taz
bisounours-codeur
Posté le 16-09-2004 à 19:36:10  profilanswer
 

que tu risques d'être victime de conversions dégradantes

n°852116
matafan
Posté le 16-09-2004 à 21:36:09  profilanswer
 

Contrairement aux idees recues, NULL est de type int dans la pluspart des implementations (i.e. #define NULL 0), bien que le C ANSI autorise egalement #define (void *)0.

mood
Publicité
Posté le 16-09-2004 à 21:36:09  profilanswer
 

n°852303
Taz
bisounours-codeur
Posté le 17-09-2004 à 00:27:08  profilanswer
 

mouef, tu confonds avec le C++ où 0 est une valeur spéciale je pense, j'ia vu très peu d'environnement C où NULL n'était pas un void*

n°852951
matafan
Posté le 17-09-2004 à 22:50:32  profilanswer
 

Verification faite sous linux c'est ((void *)0). Sous AIX c'est 0.

n°852957
Taz
bisounours-codeur
Posté le 17-09-2004 à 22:55:07  profilanswer
 

t'es sur que le compilateur d'AIX n'est pas mixte ? de toutes façons, ça m'étonnerait pas que le compilo AIX soit défficient car anté-déluvien ... attention aux surpises ...

n°853057
matafan
Posté le 18-09-2004 à 07:27:55  profilanswer
 

Le compilo d'AIX (Visual Age) est parfaitement maintenu et développé, et est d'ailleurs à la pointe en matière d'optimisation pour l'architecture Power. Je crois que si gcc était aussi performant ça comblerait les grincheux au delà de leurs espérances ;)
 
Celà dit j'ai fais les tests avec #include <stdlib.h> et le flag -E, donc le compilo n'a rien à voir là dedans.

n°853069
Taz
bisounours-codeur
Posté le 18-09-2004 à 10:27:15  profilanswer
 

quoi ? compilo ça inclue le cpp, on va pas chipoter ... toutes façons je vois pas ce que tu veux que ça soit à part une macro ?

n°853170
Joel F
Real men use unique_ptr
Posté le 18-09-2004 à 13:39:02  profilanswer
 

matafan a écrit :

Le compilo d'AIX (Visual Age) est parfaitement maintenu et développé, et est d'ailleurs à la pointe en matière d'optimisation pour l'architecture Power.  


 
 [:autobot] j'ai mal lu là non ???  [:a_bon]

n°853194
Taz
bisounours-codeur
Posté le 18-09-2004 à 14:46:34  profilanswer
 

(moi aussi je pense avoir mal lu, mais n'ayant pas d'AIX sous la main-

n°853284
matafan
Posté le 18-09-2004 à 18:57:59  profilanswer
 

Joel, tu as peut-être une vieille version du compilo, mais je t'assure qu'il est activement développé et n'a rien d'obsolète... Je bosse sur les outils de perf AIX (ce qui inclue tprof, un profileur dont les dev du compilo sont d'ailleurs de grands utilisateurs), donc je parle en connaissance de cause. Maintenant évidemment, comme beaucoup de clients utilisent encore de vieilles versions d'AIX et du compilo (ce qui n'est pas un problème en soi), on a vite fait de tirer des conclusion hative. Faut juste savoir de quoi on parle. Enfin bon on disgresse, fin de la parenthèse.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  cryptage de fichier avec XOR

 

Sujets relatifs
Ecriture dans un fichier : erreur de retour à la ligne [résolu]Récupération du contenu d'un fichier et traitement
ouverture fichier xlx en ordre alpha en vbaurl dans fichier xml découpé en 3 partie, pourquoi ?
[shell]boucle for imbriquée pour recopie de fichier[PHP] Rechercher des balises dans un fichier [RESOLU]
Uploader un fichier sur un ftp par formulaire HTML ?relire un fichier FileReader BufferedReader
[divers] Supprimer les retours à ligne présents dans fichier texteConnaitre la position dans un fichier d'un élément ou attribut DOM
Plus de sujets relatifs à : cryptage de fichier avec XOR


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR