Advertisement
Vincent38190

algorithme.c

Jan 25th, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.18 KB | None | 0 0
  1. #ifndef DEF_algorithme
  2. #define DEF_algorithme
  3. #include "algorithme.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <math.h>
  8. #endif // DEF_cl
  9. #define TAILLE_MAX 1000
  10. #define RANDOM_MAX 1000
  11. #define RANDOM_MIN 1
  12. #define SAVE "save/lastSave"
  13. #define KEY "1999"
  14.  
  15. #define TEST_VALEUR TEST_MINUSCULE || TEST_MAJUSCULE || TEST_CHIFFRE
  16. #define TEST_MINUSCULE (valeur >= 97 && valeur <= 122)
  17. #define TEST_MAJUSCULE (valeur >= 65 && valeur <= 90)
  18. #define TEST_CHIFFRE (valeur >= 48 && valeur <= 57)
  19.  
  20.  
  21. void Chiffrement(const char entree[], char sortit[], const long cle)
  22. {
  23.     int longueurChaine = strlen(entree);
  24.         long i = 0;
  25.         long base = 0,modulo = 0;
  26.         long place = 0;
  27.         for(i = 0; i < longueurChaine; i ++)
  28.         {
  29.             base = TestValeur(entree[i]);
  30.             if(base == 48)
  31.                 modulo = 10;
  32.             else
  33.                 modulo = 26;
  34.             place ++;
  35.             //if (entree[i] == 95 || entree[i] == 32)
  36.             if (TestValeur(entree[i]) != 48 && TestValeur(entree[i]) != 65 && TestValeur(entree[i]) != 97)
  37.             {
  38.                 sortit[i] = entree[i];
  39.                 place --;
  40.             }
  41.             else
  42.             {
  43.             sortit[i] = ((( entree[i] - base )+(cle * place ))%modulo)+base;
  44.             }
  45.  
  46.  
  47.             }
  48.  
  49. }
  50.  
  51. void Dechiffrement(const char entree[],char sortit[],const long cle)
  52. {
  53.  
  54.  
  55.     long longueurChaine = strlen(entree);
  56.         long i;
  57.         char base = 0;
  58.         char modulo = 0;
  59.         char place = 0;
  60.         for(i = 0; i < longueurChaine; i ++)
  61.         {
  62.             base = TestValeur(entree[i]);
  63.             if(TestValeur(entree[i]) == 48)
  64.                 modulo = 10;
  65.             else
  66.                 modulo = 26;
  67.             place ++;
  68.             if (base != 48 && base != 97 && base != 65)
  69.             {
  70.                 sortit[i] = entree[i];
  71.                 place --;
  72.             }
  73.             else
  74.             {
  75.  
  76.  
  77.              sortit[i] = (((entree[i] - base) - (cle * place )) % modulo)+(base + modulo) ;
  78.                 while (sortit[i] > (base + modulo - 1))
  79.                 {
  80.                     sortit[i] = ((sortit[i]-base) % modulo) + base ;
  81.                 }
  82.  
  83.             }
  84.         }
  85.  
  86. }
  87.  
  88. void Save(const char messagesNonCrypte[], const char messagesCrypte[] ,const long cle)
  89. {
  90.  
  91.     char copieMessagesNonCrypte[TAILLE_MAX] = "" , copieMessagesCrypte[TAILLE_MAX]= "";
  92.     long copieCle = cle;
  93.     strcpy(copieMessagesNonCrypte,messagesNonCrypte);
  94.     strcpy(copieMessagesCrypte,messagesCrypte);
  95.     FILE* save = NULL;
  96.     save = fopen(SAVE,"w");
  97.  
  98.     CrypterSave(copieMessagesNonCrypte,copieMessagesCrypte,&copieCle);
  99.     if(save != NULL)
  100.     {
  101.         fprintf(save,"%s %s %ld", copieMessagesNonCrypte , copieMessagesCrypte , copieCle);
  102.         fclose(save);
  103.     }
  104.     else
  105.     {
  106.         printf("Impossible de sauvgarder le fichier\n");
  107.     }
  108.  
  109. }
  110.  
  111. void AfficherSave()
  112. {
  113.     char messagesNonCrypte[TAILLE_MAX] = "" , messagesCrypte[TAILLE_MAX] = "";
  114.     long cle = 0;
  115.     FILE *save = NULL;
  116.     save = fopen(SAVE,"r");
  117.     if(save != NULL)
  118.     {
  119.  
  120.            fscanf(save, "%s  %s %ld", messagesNonCrypte , messagesCrypte , &cle );
  121.            DecrypterSave(messagesNonCrypte,messagesCrypte,&cle);
  122.            fclose(save);
  123.            printf("Message non crypte : %s\nMessage crypte : %s\nCle : %ld\n", messagesNonCrypte , messagesCrypte , cle);
  124.     }
  125.     else
  126.     {
  127.         printf("Impossible de charger le fichier\n");
  128.     }
  129.  
  130. }
  131.  
  132. void LireFichier(const char nomDuFichierSansExtension[], const int mode, const long cle)
  133. {
  134.     FILE *fichier = NULL;
  135.     char extension[5] = ".txt", nomDuFichier[TAILLE_MAX] = "";
  136.     strcpy(nomDuFichier , nomDuFichierSansExtension);
  137.     strcat(nomDuFichier,extension);
  138.     fichier = fopen(nomDuFichier,"r");
  139.     char chaine[TAILLE_MAX] = "";
  140.     if(fichier != NULL)
  141.     {
  142.         while(fgets(chaine, TAILLE_MAX , fichier))
  143.         {}
  144.     }
  145.  
  146. }
  147.  
  148. void CrypterSave(char messagesNonCrypte[], char messagesCrypte[],long *cle)
  149. {
  150.  
  151.     char sortit1[TAILLE_MAX] = "", sortit2[TAILLE_MAX] = "";
  152.     long sortit3 = 0;
  153.     strcpy(sortit1, messagesNonCrypte);
  154.     strcpy(sortit2, messagesCrypte);
  155.     sortit3 = *cle;
  156.     long cleRandom = (rand()%(RANDOM_MAX - RANDOM_MIN + 1)) + RANDOM_MIN;
  157.     long cleRandom2 = (rand()%(RANDOM_MAX - RANDOM_MIN + 1)) + RANDOM_MIN;
  158.     long cleRandom3 = (rand()%(RANDOM_MAX - RANDOM_MIN + 1)) + RANDOM_MIN;
  159.     long cleRandomChiffre = cleRandom * cleRandom2;
  160.     long clement = cleRandom3 * cleRandom2;
  161.     Chiffrement(sortit1,messagesNonCrypte,cleRandom);
  162.     Chiffrement(sortit2,messagesCrypte,cleRandom3);
  163.     *cle = (sortit3 + cleRandom2);
  164.     FILE *fichier = NULL;
  165.     fichier = fopen(KEY , "w");
  166.     fprintf(fichier , "%ld %ld %ld",cleRandom,cleRandomChiffre,clement);
  167.     fclose(fichier);
  168.  
  169.  
  170. }
  171.  
  172. void DecrypterSave(char messagesNonCrypt[],char messagesCrypt[],long *cle)
  173. {
  174.     char sortit1[TAILLE_MAX] = "", sortit2[TAILLE_MAX] = "";
  175.     long sortit3 = 0, cleRandom = 0, cleRandom2 = 0,cleRandomChiffre = 0;
  176.     long clement = 0, cleRandom3 = 0;
  177.     FILE *crypt = NULL;
  178.     crypt = fopen(KEY,"r");
  179.     FILE *fichier = NULL;
  180.     fichier = fopen(SAVE,"r");
  181.     if(fichier != NULL && crypt != NULL)
  182.     {
  183.         fscanf(crypt ,"%ld %ld %ld", &cleRandom, &cleRandomChiffre, &clement);
  184.         cleRandom2 = cleRandomChiffre / cleRandom;
  185.         cleRandom3 = clement / cleRandom2;
  186.         fscanf(fichier , "%s %s %ld", sortit1 , sortit2 , &sortit3 );
  187.         Dechiffrement(sortit1,messagesNonCrypt,cleRandom);
  188.         Dechiffrement(sortit2,messagesCrypt,cleRandom3);
  189.         *cle = sortit3 - cleRandom2 ;
  190.         fclose(crypt);
  191.         fclose(fichier);
  192.     }
  193.     else
  194.     {
  195.         char erreur[13] = "";
  196.         if(fichier != NULL)
  197.         {
  198.         const char erreurCopie[11] = "le fichier";
  199.         strcpy(erreur , erreurCopie);
  200.         }
  201.         else
  202.         {
  203.         const char erreurCopie[13] = "la sauvgarde";
  204.         strcpy(erreur,erreurCopie);
  205.         }
  206.         printf("\nErreur de decryptage du fichier ( erreur pour ouvrir %s )", erreur);
  207.     }
  208.  
  209. }
  210.  
  211. int TestValeur(char valeur)
  212. {
  213.     if(TEST_CHIFFRE)
  214.         return 48;
  215.     if(TEST_MAJUSCULE)
  216.         return 65;
  217.     if(TEST_MINUSCULE)
  218.         return 97;
  219.     else
  220.         return 0;
  221. }
  222. void viderBuffer()
  223. {
  224.     int c = 0;
  225.     while (c != '\n' && c != EOF)
  226.     {
  227.         c = getchar();
  228.     }
  229. }
  230.  
  231. int lire(char *chaine, long longueur)
  232. {
  233.     char *positionEntree = NULL;
  234.  
  235.     if (fgets(chaine, longueur, stdin) != NULL)
  236.     {
  237.         positionEntree = strchr(chaine, '\n');
  238.         if (positionEntree != NULL)
  239.         {
  240.             *positionEntree = '\0';
  241.         }
  242.         else
  243.         {
  244.             viderBuffer();
  245.         }
  246.         return 1;
  247.     }
  248.     else
  249.     {
  250.         viderBuffer();
  251.         return 0;
  252.     }
  253. }
  254.  
  255. long lireLong()
  256. {
  257.     char nombreTexte[100] = {0}; // 100 cases devraient suffire
  258.  
  259.     if (lire(nombreTexte, 100))
  260.     {
  261.         // Si lecture du texte ok, convertir le nombre en long et le retourner
  262.         return strtol(nombreTexte, NULL, 10);
  263.     }
  264.     else
  265.     {
  266.         // Si problème de lecture, renvoyer 0
  267.         return 0;
  268.     }
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement