logo Homepage
+  NewbieContest
Username:
Password:
  Voir les messages
Pages: [1]
1  Programmation / Langages compilés / [C] crypteur/décrypteur XOR le: 03 Juin 2006 à 22:12:36
N hesite pas a demander des precisions
si ca ne te semble pas clair ...

le "cryptage" se fait a la ligne
 -> c = h ^ clef ;
 
A noter que si ton fichier à crypter a des caracteres '\0' consecutifs,
 la clef est ecrite en clair,
en effet, si h = '\0', alors '\0' ^ clef =  clef !
Amusant de voir la clef ecrite en clair
2  Programmation / Langages compilés / [C] crypteur/décrypteur XOR le: 03 Juin 2006 à 18:39:04
Salut tout le monde,
 j ai repioche un vieux fichier a moi qui fait ca :

main.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void xor_file (FILE* source, FILE* destination, char* clef)
{
  long taille, i;
  int h, c;

  i = 0;
  taille = strlen (clef);
  h = fgetc (source);

  while (!feof (source))
    {
      c = h ^ clef [i];
      fputc (c, destination);
      i++;
      if (i == taille) {
i = 0;
      }
      h = fgetc (source);
    }
}
Code:
void error (FILE* file, char* filename) {
  if (!file) {
    fprintf (stderr, "Impossible d'ouvrir le fichier %s\n", filename);
  }
}

int xor (char* src, char* dest, char* clef)
{
  FILE * source, *destination;

  if ( ( (source = fopen (src, "rb")) != NULL) &&
       ( (destination = fopen (dest, "wb")) != NULL))
    {
      xor_file (source, destination, clef);
      fclose (source);
      fclose (destination);
      return 1;
    }

  error (source, src);
  error (destination, dest);
  return 0;
}
Code:
void usage (char* cmd) 
{
  fprintf (stderr, "Usage : %s src dest clef\n", cmd);
  exit (EXIT_FAILURE);
}

int main (int argc, char* argv[])
{
   long e = LONG_MAX;

  if (argc < 4)
    {
      usage (argv[0]);
    }
  xor (argv[1], argv[2], argv[3]);
  return EXIT_SUCCESS;
}
Utilisation :
tu compiles comme tu le sens, gcc main.c au plus simple : on aura un a.out (a.exe pour sous win)
 et la, sous console : on crypte fichier1 en fichier 2 avec la clef "letsgo"

 a.out fichier1.txt fichier2.txt letsgo

on decrytpe le fichier2.txt dans fichierDecrypte.txt avec la meme clef par la commande :
 a.out fichier2.txt fichierDecrypte.txt letsgo
 
Et si tout va bien (et y a de raisons qu il y en aille autrment), fichier1.txt et fichierDecrypte.txt sont identiques ^^

Voilou
Pages: [1]