Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 19-05-2009 22: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 11:06:51
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 948
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
Pages : 1