Partage
  • Partager sur Facebook
  • Partager sur Twitter

Décryptage d'un code crypté

Sujet résolu
    22 septembre 2018 à 16:28:32

    Bonjour, 

    Pour mes cours de C en 2e année de prépa, je dois créer une fonction qui crypte un message de la manière suivante :

    Soit seq une séquence, c un caractère et res le message voulu codé :

    Si c n'est pas dans la séquence je le rajoute à la fin et je le laisse tel quel dans res

    Si il y est :

    si c est le premier caractère de la séquence alors je prends le dernier élément de seq pour le mettre à la suite de res, et je décale la séquence sans c et je met c à la fin de cette dernière 

    sinon je prends le caractère d'avant dans seq et je le met à la fin de res et je décale le seq de la même manière.

    Exemple :

    je veux coder abcac :

    c = a              c = b            c = c            c = a              c = c

    seq = a          seq = ab      seq = abc    seq = bca      seq = bac

    res = a           res = ab       res = abc    res = abcc      res = abccb

    J'ai codé cette fonction sans problème par contre maintenant il faut que je fasse la fonction de décodage et ça fait des jours que je me creuse la tête sans trouver la solution... Bien sur prendre l'algo de cryptage dans l'autre sens ne marche pas...

    Merci de vos réponses.

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2018 à 17:54:56

      Bonsoir,

      Si tu pouvais mieux expliquer l'algo ce serait déjà mieux. Parce que j'ai beau lire relire et le faire sur papier je ne comprend pas. Si tu pouvais donner l'algo (en pseudocode)

      -
      Edité par Malice13 22 septembre 2018 à 17:56:11

      • Partager sur Facebook
      • Partager sur Twitter

      Malice13

        23 septembre 2018 à 22:19:55

        Merci pour ta réponse, j'ai réussi a enfin trouver la fonction de décodage mais je te joins quand même le code en C de la fonction de codage, peut être comprendras tu mieux cette fonction assez complexe.
        #include <stdio.h>
        
        int app_seq(char c, char tab[]) {
        	int i = 0;
        	while (tab[i] != '\0') {
        		if (c == tab[i]) {
        			return i;
        		}
        		i++;
        	}
        return -1;
        }
        
        void decale_tableau_fin(char tab[], int pos) {
        	char temp = tab[pos];
        	int i = 0;
        	while (tab[i] != '\0') {
        		if (i >= pos) {
        			if (tab[i+1] != '\0') {
        				tab[i] = tab[i+1];
        			} else {
        				tab[i] = temp;
        			}
        		}
        		i++;
        	}
        }
        		
        			
        int main(int argc, char *argv[]) {
        	int s = 0;
        	int te = 0;
        	int pos_temp = 0;
        	char seq[200];
        	char c;
        	FILE *texte;
        	char texte_encrypt[5000];
        	
        	if (argc != 2) {
        		printf("Le nombre d'argument est incorrect.\n");
        		exit(-1);
        	} else {
        		texte = fopen(argv[1],"r");
        		if (texte == NULL) {
        			perror("Le nom du fichier est incorrecte et/ou n'existe pas.\n");	
        			exit(-2);
        		} else {
        			fscanf(texte,"%c",&c);
        			while (!feof(texte)) {
        				pos_temp = app_seq(c,seq);
        				if (pos_temp == -1) {
        					seq[s] = c;
        					seq[s+1] = '\0';
        					texte_encrypt[te] = c;
        					texte_encrypt[te+1] = '\0';
        					s++;
        					te++;
        				} else {
        					if (c == seq[0]) {
        						texte_encrypt[te] = seq[s-1];
        						texte_encrypt[te+1] = '\0';
        						te++;
        						decale_tableau_fin(seq,0);
        					} else {
        						texte_encrypt[te] = seq[pos_temp-1];
        						texte_encrypt[te+1] = '\0';
        						te++;
        						decale_tableau_fin(seq,pos_temp);
        					}	
        				}
        				fscanf(texte,"%c",&c);
        			}
        		}
        	}
        printf("%s\n",texte_encrypt);
        return 0;
        }
        • Partager sur Facebook
        • Partager sur Twitter

        Décryptage d'un code crypté

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown