Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef DEF_algorithme
- #define DEF_algorithme
- #include "algorithme.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #endif // DEF_cl
- #define TAILLE_MAX 1000
- #define RANDOM_MAX 1000
- #define RANDOM_MIN 1
- #define SAVE "save/lastSave"
- #define KEY "1999"
- #define TEST_VALEUR TEST_MINUSCULE || TEST_MAJUSCULE || TEST_CHIFFRE
- #define TEST_MINUSCULE (valeur >= 97 && valeur <= 122)
- #define TEST_MAJUSCULE (valeur >= 65 && valeur <= 90)
- #define TEST_CHIFFRE (valeur >= 48 && valeur <= 57)
- void Chiffrement(const char entree[], char sortit[], const long cle)
- {
- int longueurChaine = strlen(entree);
- long i = 0;
- long base = 0,modulo = 0;
- long place = 0;
- for(i = 0; i < longueurChaine; i ++)
- {
- base = TestValeur(entree[i]);
- if(base == 48)
- modulo = 10;
- else
- modulo = 26;
- place ++;
- //if (entree[i] == 95 || entree[i] == 32)
- if (TestValeur(entree[i]) != 48 && TestValeur(entree[i]) != 65 && TestValeur(entree[i]) != 97)
- {
- sortit[i] = entree[i];
- place --;
- }
- else
- {
- sortit[i] = ((( entree[i] - base )+(cle * place ))%modulo)+base;
- }
- }
- }
- void Dechiffrement(const char entree[],char sortit[],const long cle)
- {
- long longueurChaine = strlen(entree);
- long i;
- char base = 0;
- char modulo = 0;
- char place = 0;
- for(i = 0; i < longueurChaine; i ++)
- {
- base = TestValeur(entree[i]);
- if(TestValeur(entree[i]) == 48)
- modulo = 10;
- else
- modulo = 26;
- place ++;
- if (base != 48 && base != 97 && base != 65)
- {
- sortit[i] = entree[i];
- place --;
- }
- else
- {
- sortit[i] = (((entree[i] - base) - (cle * place )) % modulo)+(base + modulo) ;
- while (sortit[i] > (base + modulo - 1))
- {
- sortit[i] = ((sortit[i]-base) % modulo) + base ;
- }
- }
- }
- }
- void Save(const char messagesNonCrypte[], const char messagesCrypte[] ,const long cle)
- {
- char copieMessagesNonCrypte[TAILLE_MAX] = "" , copieMessagesCrypte[TAILLE_MAX]= "";
- long copieCle = cle;
- strcpy(copieMessagesNonCrypte,messagesNonCrypte);
- strcpy(copieMessagesCrypte,messagesCrypte);
- FILE* save = NULL;
- save = fopen(SAVE,"w");
- CrypterSave(copieMessagesNonCrypte,copieMessagesCrypte,&copieCle);
- if(save != NULL)
- {
- fprintf(save,"%s %s %ld", copieMessagesNonCrypte , copieMessagesCrypte , copieCle);
- fclose(save);
- }
- else
- {
- printf("Impossible de sauvgarder le fichier\n");
- }
- }
- void AfficherSave()
- {
- char messagesNonCrypte[TAILLE_MAX] = "" , messagesCrypte[TAILLE_MAX] = "";
- long cle = 0;
- FILE *save = NULL;
- save = fopen(SAVE,"r");
- if(save != NULL)
- {
- fscanf(save, "%s %s %ld", messagesNonCrypte , messagesCrypte , &cle );
- DecrypterSave(messagesNonCrypte,messagesCrypte,&cle);
- fclose(save);
- printf("Message non crypte : %s\nMessage crypte : %s\nCle : %ld\n", messagesNonCrypte , messagesCrypte , cle);
- }
- else
- {
- printf("Impossible de charger le fichier\n");
- }
- }
- void LireFichier(const char nomDuFichierSansExtension[], const int mode, const long cle)
- {
- FILE *fichier = NULL;
- char extension[5] = ".txt", nomDuFichier[TAILLE_MAX] = "";
- strcpy(nomDuFichier , nomDuFichierSansExtension);
- strcat(nomDuFichier,extension);
- fichier = fopen(nomDuFichier,"r");
- char chaine[TAILLE_MAX] = "";
- if(fichier != NULL)
- {
- while(fgets(chaine, TAILLE_MAX , fichier))
- {}
- }
- }
- void CrypterSave(char messagesNonCrypte[], char messagesCrypte[],long *cle)
- {
- char sortit1[TAILLE_MAX] = "", sortit2[TAILLE_MAX] = "";
- long sortit3 = 0;
- strcpy(sortit1, messagesNonCrypte);
- strcpy(sortit2, messagesCrypte);
- sortit3 = *cle;
- long cleRandom = (rand()%(RANDOM_MAX - RANDOM_MIN + 1)) + RANDOM_MIN;
- long cleRandom2 = (rand()%(RANDOM_MAX - RANDOM_MIN + 1)) + RANDOM_MIN;
- long cleRandom3 = (rand()%(RANDOM_MAX - RANDOM_MIN + 1)) + RANDOM_MIN;
- long cleRandomChiffre = cleRandom * cleRandom2;
- long clement = cleRandom3 * cleRandom2;
- Chiffrement(sortit1,messagesNonCrypte,cleRandom);
- Chiffrement(sortit2,messagesCrypte,cleRandom3);
- *cle = (sortit3 + cleRandom2);
- FILE *fichier = NULL;
- fichier = fopen(KEY , "w");
- fprintf(fichier , "%ld %ld %ld",cleRandom,cleRandomChiffre,clement);
- fclose(fichier);
- }
- void DecrypterSave(char messagesNonCrypt[],char messagesCrypt[],long *cle)
- {
- char sortit1[TAILLE_MAX] = "", sortit2[TAILLE_MAX] = "";
- long sortit3 = 0, cleRandom = 0, cleRandom2 = 0,cleRandomChiffre = 0;
- long clement = 0, cleRandom3 = 0;
- FILE *crypt = NULL;
- crypt = fopen(KEY,"r");
- FILE *fichier = NULL;
- fichier = fopen(SAVE,"r");
- if(fichier != NULL && crypt != NULL)
- {
- fscanf(crypt ,"%ld %ld %ld", &cleRandom, &cleRandomChiffre, &clement);
- cleRandom2 = cleRandomChiffre / cleRandom;
- cleRandom3 = clement / cleRandom2;
- fscanf(fichier , "%s %s %ld", sortit1 , sortit2 , &sortit3 );
- Dechiffrement(sortit1,messagesNonCrypt,cleRandom);
- Dechiffrement(sortit2,messagesCrypt,cleRandom3);
- *cle = sortit3 - cleRandom2 ;
- fclose(crypt);
- fclose(fichier);
- }
- else
- {
- char erreur[13] = "";
- if(fichier != NULL)
- {
- const char erreurCopie[11] = "le fichier";
- strcpy(erreur , erreurCopie);
- }
- else
- {
- const char erreurCopie[13] = "la sauvgarde";
- strcpy(erreur,erreurCopie);
- }
- printf("\nErreur de decryptage du fichier ( erreur pour ouvrir %s )", erreur);
- }
- }
- int TestValeur(char valeur)
- {
- if(TEST_CHIFFRE)
- return 48;
- if(TEST_MAJUSCULE)
- return 65;
- if(TEST_MINUSCULE)
- return 97;
- else
- return 0;
- }
- void viderBuffer()
- {
- int c = 0;
- while (c != '\n' && c != EOF)
- {
- c = getchar();
- }
- }
- int lire(char *chaine, long longueur)
- {
- char *positionEntree = NULL;
- if (fgets(chaine, longueur, stdin) != NULL)
- {
- positionEntree = strchr(chaine, '\n');
- if (positionEntree != NULL)
- {
- *positionEntree = '\0';
- }
- else
- {
- viderBuffer();
- }
- return 1;
- }
- else
- {
- viderBuffer();
- return 0;
- }
- }
- long lireLong()
- {
- char nombreTexte[100] = {0}; // 100 cases devraient suffire
- if (lire(nombreTexte, 100))
- {
- // Si lecture du texte ok, convertir le nombre en long et le retourner
- return strtol(nombreTexte, NULL, 10);
- }
- else
- {
- // Si problème de lecture, renvoyer 0
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement