Chiffre de césar
cloc
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dois mettre en place un algorithme de codage simple par décalage des lettres de l'alphabet.Le principe est que si la clé vaut 3 par exemple,on va faire un décalage de 3 caracteres, ainsi le A devient le D, le B devient le E , le Z devient le C.C'est circulaire.
J'ai deja mis en place un programme en c, mais je ne sais pas comment faire le décalage circulaire.
voici mon code:
Je dois mettre en place un algorithme de codage simple par décalage des lettres de l'alphabet.Le principe est que si la clé vaut 3 par exemple,on va faire un décalage de 3 caracteres, ainsi le A devient le D, le B devient le E , le Z devient le C.C'est circulaire.
J'ai deja mis en place un programme en c, mais je ne sais pas comment faire le décalage circulaire.
voici mon code:
#include <stdio.h>
#include <stdlib.h>
char crypter_caractere(char c,int cl)
{
int k,k2;char c2;
k=(int)c;
k2=k+cl;
c2=(char)k2;
return c2;
}
char decrypter_code(char c,int cl)
{
int k,k2;char c2;
k=(int)c;
k2=k-cl;
c2=(char)k2;
return c2;
}
int main()
{ char texteClair[]="SECRETCODE";
char texte_crypte[100];
char texte_decrypte[100];
int cle,i;char d;
do
{
printf("Saisir la cle\n");
scanf("%d",&cle);
}while(cle>=26);
for(i=0;i<strlen(texteClair);i++)
{
texte_crypte[i]=crypter_caractere(texteClair[i],cle);
}
printf("Texte crypte:\n");
for(i=0;i<strlen(texteClair);i++)
{
printf("%c",texte_crypte[i]);
}
printf("\n");
for(i=0;i<strlen(texteClair);i++)
{
texte_decrypte[i]=decrypter_code(texte_crypte[i],cle);
}
printf("Texte decrypte:\n");
for(i=0;i<strlen(texteClair);i++)
{
printf("%c",texte_decrypte[i]);
}
return 0;
}
A voir également:
- Chiffre de césar
- Excel trier par ordre croissant chiffre - Guide
- Clavier iphone chiffre et lettre - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Chiffre en lettre - Télécharger - Outils professionnels
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
1 réponse
Bonjour,
On ne dit pas crypter mais chiffrer :-). De même, dans ton cas, ça sera déchiffrer. Ensuite, tu aurais dû plutôt faire les boucles for dans tes fonctions. Ca serait plus propre.
Pour le côté circulaire, il suffit d'utiliser modulo (opérateur %).
Par exemple, si tous tes caractères sont en majuscule :
Quelques remarques sur le code :
int main()
Le bon prototype est int main(void)
while(cle>=26);
Il faudrait aussi vérifier que cle n'est pas négatif.
Tu peux également simplifier tes fonctions de chiffrement et déchiffrement. Pas besoin de tant de variables, un simple return est suffisant.
Note : pour la prochaine fois, au lieu d'utiliser la balise code, utilise plutôt code c. Cela mettra de la couleur :-).
--
Google is your friend
On ne dit pas crypter mais chiffrer :-). De même, dans ton cas, ça sera déchiffrer. Ensuite, tu aurais dû plutôt faire les boucles for dans tes fonctions. Ca serait plus propre.
Pour le côté circulaire, il suffit d'utiliser modulo (opérateur %).
Par exemple, si tous tes caractères sont en majuscule :
k2 = (k - 'A' + cl) % 26 + 'A';
Quelques remarques sur le code :
int main()
Le bon prototype est int main(void)
while(cle>=26);
Il faudrait aussi vérifier que cle n'est pas négatif.
Tu peux également simplifier tes fonctions de chiffrement et déchiffrement. Pas besoin de tant de variables, un simple return est suffisant.
Note : pour la prochaine fois, au lieu d'utiliser la balise code, utilise plutôt code c. Cela mettra de la couleur :-).
--
Google is your friend
mais je ne comprends pas pourquoi vous avez fait k2 = (k - 'A' + cl) % 26 + 'A';?
Avant d'appliquer le modulo, il faut ramener l'intervalle entre 0 et 26. On fait donc k-'A'.
Ensuite, on applique la clé et le modulo : (k-'A'+cl)%26. Et enfin, on ramène l'intervalle entre 'A' et 'Z' en refaisant une addition avec 'A'.
Prends un papier et vérifier avec différentes valeurs de k. Tu comprendras mieux.
je suis d'accord que le k représente le code ASCII du caractère et qu'il est compris entre 'A' et 'Z'.
Mais pourquoi ramener l'intervalle entre 0 et 26?
Ce sont des maths là. Le modulo 26 ramène à l'intervalle 0 25. Donc si le caractère que tu souhaites chiffrer n'est pas dans cet intervalle, ça ne sera pas bon.