Polybe, le retour : déchiffrement

Voir le sujet précédent Voir le sujet suivant Aller en bas

Polybe, le retour : déchiffrement

Message  azerty le Lun 30 Mar 2009 - 6:18

Pour rappel du code du projet que j'ai nommé chiffrement_polybe_v1 :

Code:

/*  main.c  */

#include "chiffrage.h"
#include <stdio.h>
#include <string.h>

static void fclean (char *line, FILE * fp) // pour remplacer les \n par un caractère de fin de ligne.
{
    char *p = strchr (line, '\n'); // on recherche le \n
    if (p != NULL)
    {
        *p = 0; // on le remplace par 0
    }
    else
    {
        int c;
        while ((c = fgetc (fp)) != '\n' && c != EOF)
        {
        }
    }
}

static void afficherChiffree (char const *s_chiffree, int n)
{
    int i;
    printf ("Voici la phrase chiffree:\n");
    for (i = 0; i < n; i++)
    {
        printf ("%d ", s_chiffree[i]);
    }
    printf ("\n");
}

int main (void)
{
    enum
    { MAX = 1000 };
    char s_aChiffrer[MAX];
    char s_chiffree[MAX];

    printf ("Entrez la phrase a chiffrer:\n");
    fgets (s_aChiffrer, MAX, stdin);
    fclean (s_aChiffrer, stdin);

    {
        int n = chiffrerPolybe (s_chiffree, s_aChiffrer);
        afficherChiffree (s_chiffree, n);
    }

    return 0;
}


Code:


/*  algorithme_chiffrage.c  */

#include "chiffrage.h"

int chiffrerPolybe (char *s_chiffree, char const *s_aChiffrer)
{
    int i = 0;

    do
    {
        int c = s_aChiffrer[i] - 'a';

        if (s_aChiffrer[i] >= 'a' && s_aChiffrer[i] <= 'v')
        {
            s_chiffree[i] = c + 11 + 5 * (c / 5);
        }

        else if (s_aChiffrer[i] >= 'w' && s_aChiffrer[i] <= 'z')
        {
            c--;
            s_chiffree[i] = c + 11 + 5 * (c / 5);
        }

        else
        {
            s_chiffree[i] = 0;
        }
        i++;
    }
    while (s_aChiffrer[i]);

    return i;
}
Code:

#ifndef H_POLYBE
#define H_POLYBE

/* chiffrage.h */

int chiffrerPolybe (char *s_chiffree, char const *s_aChiffrer);

#endif /* guard */

Tout d'abord, as-tu des choses à redire sur ce code ? amélioration etc. Tu as déjà fait 70% du code, mais je l'ai peut-être un peu modifié depuis.

Ensuite, j'aimerai créer UN PROJET DIFFERENT uniquement pour le déchiffrement de Polybe. Autrement dit, le projet si dessus pour chiffrer, et un seconde différent pour déchiffrer (je précise parce que j'ai déjà demandé de l'aide, et on m'a donné un code incluant le déchiffrement, mais dans le même projet, alors que j'en voudrai deux séparés). Hors je ne trouve pas d'algorithme de déchiffrement... Help me !

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Polybe, le retour : déchiffrement

Message  -ed- le Lun 30 Mar 2009 - 13:20

azerty a écrit:Ensuite, j'aimerai créer UN PROJET DIFFERENT uniquement pour le déchiffrement de Polybe. Autrement dit, le projet si dessus pour chiffrer, et un seconde différent pour déchiffrer (je précise parce que j'ai déjà demandé de l'aide, et on m'a donné un code incluant le déchiffrement, mais dans le même projet, alors que j'en voudrai deux séparés). Hors je ne trouve pas d'algorithme de déchiffrement... Help me !
Bizarre. Si on t'a donné le code qui permet de déchiffrer, ça ne doit pas être très difficile de le simplifier en ne faisant que le déchiffrement...

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Raisons

Message  azerty le Mar 31 Mar 2009 - 6:09

Oui, je pense que tu as raison. Mais il faut alors que je fasse un algorithme_dechiffrement.c : ce qui m'intéresse ici c'est l'algo., il va falloir que je l'isole donc dans un autre fichier. J'essaie ça, si je n'y arrive pas je te demande, ok? Et si j'y arrive, je poste mon code quand même Laughing !

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Code

Message  azerty le Mer 1 Avr 2009 - 6:09

Code:

/*  main.c  */

#include "polybe.h"
#include <stdio.h>
#include <string.h>

static void fclean(char *line, FILE * fp) /* pour remplacer les \n par un caractère de fin de ligne. */
{
    char *p = strchr (line, '\n'); /* on recherche le \n */
    if (p != NULL)
    {
        *p = 0; /* on le remplace par 0 */
    }
    else
    {
        int c;
        while ((c = fgetc (fp)) != '\n' && c != EOF)
        {
        }
    }
}

static void afficherChiffree (char const *s_chiffree, int n)
{
    int i;
    printf ("\nVoici la phrase chiffree:\n");
    for (i = 0; i < n; i++)
    {
        printf ("%d ", s_chiffree[i]);
    }
    printf ("\n");
}

int main (void)
{
    enum
    { MAX = 1000 };
    char s_aChiffrer[MAX];
    char s_chiffree[MAX];

    printf ("Entrez la phrase a chiffrer:\n");
    fgets (s_aChiffrer, MAX, stdin);
    fclean (s_aChiffrer, stdin);

    {
        int n = chiffrerPolybe (s_chiffree, s_aChiffrer);
        afficherChiffree (s_chiffree, n);
        dechiffrerPolybe(s_chiffree, n);
    }

    return 0;
}

Code:

/*  algorithme_chiffrage.c  */

#include "polybe.h"
#include <stdio.h>
#include <string.h>

int chiffrerPolybe (char *s_chiffree, char const *s_aChiffrer)
{
    int i = 0;

    do
    {
        int c = s_aChiffrer[i] - 'a';

        if (s_aChiffrer[i] >= 'a' && s_aChiffrer[i] <= 'v')
        {
            s_chiffree[i] = c + 11 + 5 * (c / 5);
        }

        else if (s_aChiffrer[i] >= 'w' && s_aChiffrer[i] <= 'z')
        {
            c--;
            s_chiffree[i] = c + 11 + 5 * (c / 5);
        }

        else
        {
            s_chiffree[i] = 0;
        }
        i++;
    }
    while (s_aChiffrer[i]);

    return i;
}
Code:


/*  algorithme_dechiffrage.c  */

#include "polybe.h"
#include <stdio.h>
#include <string.h>

void dechiffrerPolybe(char *s_chiffree, int n)
{
   int i;
   char carre[5][5] = {{'a', 'b', 'c', 'd', 'e'}, {'f', 'g', 'h', 'i', 'j'}, {'k', 'l', 'm', 'n', 'o'}, {'p', 'q', 'r', 's', 't'}, {'u', 'v', 'x', 'y', 'z'}};

    printf("\nEt voici la phrase dechiffree:\n");

   for(i = 0; i < n; i++)
   {
      putchar(carre[s_chiffree[i] / 10 - 1][s_chiffree[i] - (s_chiffree[i] / 10) * 10 - 1]);
   }

   printf("\n");
}
Code:
#ifndef H_POLYBE
#define H_POLYBE

/* chiffrage.h */

int chiffrerPolybe (char *s_chiffree, char const *s_aChiffrer);
void dechiffrerPolybe(char *str, int length);

#endif /* guard */


Voilà voilà ! Alors si y a des améliorations à faire (algorithme, respects des normes etc.) n'hésite pas : c'est un code assez simple mais j'aimerai qu'il soit (presque) parfait !

Merci d'avance !

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Polybe, le retour : déchiffrement

Message  -ed- le Mer 1 Avr 2009 - 9:36

azerty a écrit:
Voilà voilà ! Alors si y a des améliorations à faire (algorithme, respects des normes etc.) n'hésite pas : c'est un code assez simple mais j'aimerai qu'il soit (presque) parfait !
Il faudrait déjà qu'il fonctionne :
Code:

Entrez la phrase a chiffrer:
Hello world

Voici la phrase chiffree:
0 15 32 32 35 0 52 35 43 32 14

Et voici la phrase dechiffree:
"ello"vorld

Process returned 0 (0x0)  execution time : 8.466 s
Press any key to continue.

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Pas de maj

Message  azerty le Mer 1 Avr 2009 - 15:32

Il ne gère pas les majuscules...

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Polybe, le retour : déchiffrement

Message  -ed- le Mer 1 Avr 2009 - 16:52

azerty a écrit:Il ne gère pas les majuscules...
Il n'empêche que le 'w' est devenu 'v' ...

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

...

Message  azerty le Jeu 2 Avr 2009 - 21:06

Et c'est le propre du carré de Polybe : 25 cases pour 26 lettres, donc le v équivaut au w dans la phrase déchiffrée... c'est vrai que c'est pas terrible mais bon...

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Polybe, le retour : déchiffrement

Message  -ed- le Ven 3 Avr 2009 - 9:03

azerty a écrit:Et c'est le propre du carré de Polybe : 25 cases pour 26 lettres, donc le v équivaut au w dans la phrase déchiffrée... c'est vrai que c'est pas terrible mais bon...
OK. Je vois. C'est plutôt curieux comme problème...

A part ça, dans l'encodeur, tu fais des hypothèses sur les valeurs des caractères. C'est pas portable. D'autre part, si les majuscules ne sont pas traitées, il faut les filtrer ou les forcer en minuscule, de façon à ne pas provoquer de comportement indéterminé...

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

...

Message  azerty le Ven 3 Avr 2009 - 10:22

Mais la fonction de chiffrage c'est toi qui l'a faite...
Pour le "prétraitage" du texte, il faut utiliser toupper() ? ou l'autre je ne sais plus...

Et pour le v et w, c'est l'algo qui est comme ça, ce ne serait plus un carré de polybe sinon...

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Polybe, le retour : déchiffrement

Message  -ed- le Ven 3 Avr 2009 - 10:53

azerty a écrit:Mais la fonction de chiffrage c'est toi qui l'a faite...
Ca m'étonnerait que j'ai utilisé des comparaisons de valeurs de caractères... J'utilise plutôt des ensembles de caractères (chaines) et une recherche avec strchr() ...

Pour le "prétraitage" du texte, il faut utiliser toupper() ? ou l'autre je ne sais plus...
alors c'est

- déchiffrage (ou décodage)
- prétraitement ...

Ensuite upper = plus grand (majuscule) et lower = plus petit (minuscule). Et 'to' signifie 'vers' ...

Il ne faut pas retenir par cœur, mais 'comprendre'....
Et pour le v et w, c'est l'algo qui est comme ça, ce ne serait plus un carré de polybe sinon...
J'ai bien compris, mais c'est bizarre qu'on t'ai posé ce problème. Ce n'est pas adapté à l'alphabet standard qui comporte 26 lettres de bases, mais aussi, en Europe, des accentuées...

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

...

Message  azerty le Ven 3 Avr 2009 - 21:41

Oui, c'est bizarre... mais c'est moi qui ai choisit Polybe, c'est de ma faute Crying or Very sad !

codage polybe au cas où tu ne l'aurais pas retrouvé, le topic où tu ma aidé à faire la fonction... c'est bien de toi donc (enfin je crois je n'ai pas tout relu).

Et faut que j'apprenne à parler français. En tout cas je sais que l'académie française à bannit le mot "cryptage", qui n'a pas de raison d'exister selon elle. Et oui, prétraitage ça me paraissait bizarre, d'habitude je vérifie dans un dico, mais là j'étais en cours (oui, oui, je sais, on n'est pas senser faire ça en cours tongue )

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Donc...

Message  azerty le Dim 5 Avr 2009 - 17:10

Je n'ai actuellement pas la possibilité de coder (suis en vacances chez mon pères, y a que des macs, et je n'ai pas le droit d'installer un IDE, un compilateur non plus, d'ailleurs...). Donc en attendant que je code la gestion des majuscules, pourrait-tu me dire comment améliorer ce code : est-il possible de le réduire encore ? de le rendre plus simple ? est-il aux normes ? etc.

Merci d'avance,

Azerty

azerty
Bavard
Bavard

Messages : 15
Date d'inscription : 17/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Polybe, le retour : déchiffrement

Message  Contenu sponsorisé Aujourd'hui à 15:29


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum