Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 19-05-2009 21:56:58

styve
Invité

[C] Crytographie selon Cesar

bonjour,

je sais que d'autres ont déjà traité ce sujet, mais j'ai un problème pour adapter ce que j'ai vu en langage C et donc je voudrais savoir si quelqu'un a l'algorithme de cryptographie de Cesar en C  au complet.
Je serais ravi qu'il le partage avec moi...

merci

#2 20-05-2009 10:06:51

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 13 874

Re : [C] Crytographie selon Cesar

Bonjour,

Qu'est-ce que tu entends par "algorithme de cryptographie de Cesar au complet" ?
Est-ce que tu entends par là :
1. Traitement préalable de la phrase à coder pour
    a) Remplacer les caractères accentués
    b) Remplacer les symboles de ponctuation genre :,;'?!...-  etc par des espaces
    c) Tout passer en majuscules
2. Codage de la phrase

Si oui, alors,
1. Moi, je ne peux pas t'aider, je ne connais pas le C : j'ai regardé ça ce matin,
2. Ce n'est pas la politique de la maison de servir tout cuit sur un "plateau d'argent" sans participation du demandeur,
3. D'après ce que j'en ai vu ce matin et en fonction de ce que j'ai déjà fait en Python et en VB, je vais te faire part de mes (très) faibles lumières...

Si tu as du mal à adapter en C, tu corrigeras sans peine, mes imperfections...
Donc, ton prog devra commencer par
# include <stdio.h>
# include <string.h>
# include <stdlib.h>

main()
{
    int i, Longueur, decalage;
    decalage = 12 \\ par exemple.  Ca te permettra de voir si ton prog fonctionne grâce à la réponse donnée dans la discussion à propos de cet Algo en Visual Basic)
    char  Alphabet[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    char  PhraseClaire[]="AVE CESAR MORITURI TE SALUTANT"
    char  carac[2]
    Longueur = strlen(phraseClaire);
    char  PhraseCodee[Longueur+1]

    for (i=0,i<=Longueur,i++)
   {
         carac = PhraseClaire[i]
         if (carac=" "){
             strcat(PhraseCodee," ")
        }
          else
        {
             strcat(PhraseCodee,Alphabet[(strch(Alphabet,carac)+decalage)%26]
        }
    }
printf("La phrase codée est %s\n",PhraseCodee);
system("PAUSE");
return;
}

Ce que je n'ai pas compris dans le C :
Si je veux stocker "Bonjour" dans une chaîne, celle-ci aura une longueur de 8  donc si je veux stocker "B", elle aura une longueur de 2...
Est-ce que ça aura une incidence sur la comparaison d'égalité entre carac (le caractère extrait + "\0") et " " (l'espace) ? A toi ,qui connaît le C, de voir s'il faut comparer avec " \0" (espace + "\0") ...
J'ai aussi supposé que le 10e (par exemple) caractère de la chaine Alphabet s'extrayait, comme en Python, par Alphabet[9]...
Même problématique pour strch(Alphabet,carac) qui renvoie la position de carac dans Alphabet, à quoi j'ajoute le decalage, je prends le résultat modulo 26 et ce dernier nombre me permet d'extraire le caractère de Alphabet[ce dernier nombre] que je concatène via strcat avec PhraseCodee...

Merci de ta compréhension et mille mercis à toute personne (et/ou toi) connaissant le C d'intervenir pour rectifier mes erreurs et d'en donner une explication)...   

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
cinquante deux plus vingt deux
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums