[ Je décrypte un message en C ] [Résolu/Fermé]

Signaler
-
 un peu tard ... -
Bonjour à tous et à toutes

j'ai crée un script en C permettant de décrypter un message, au préalable, je connais comment le message est crypté.

la lettre 'm' vaut 'a' , 'n' vaut 'b', etc... donc un décalage de 12 sur l'alphabet

Je tourne sur une Linux/Unix

Voici la source:

---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
/* Programme qui scanne les textes cryptées et qui les transforment en français */
#include <stdio.h>

main()
{

char str[10000];
int canal;

printf(" Insérer votre texte crypté, merci :\n");
gets (str);
canal = 0;
while (str[canal]){
if ((str[canal] >= 97) && (str[canal] <= 122))

str[canal] -= 12; /* je décrypte en retirant 12 du code ascii*/


canal++;
}
printf("Le texte est décrypté et mis en net :\n");
puts(str);
return 0;
}

-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
A la compilation, c'est acceptable sauf un message d'alerte sur la fonction 'gets'
mon programme s'appelle alpha

[golgo13@localhost sources]$ gcc -c alpha.c
alpha.c:24:4: warning: no newline at end of file
[golgo13@localhost sources]$ gcc -o alpha alpha.c
alpha.c:24:4: warning: no newline at end of file
/home/golgo13/tmp/cc4mSANz.o(.text+0x3a): In function `main':
: warning: the `gets' function is dangerous and should not be used.
[golgo13@localhost sources]$ ./alpha
Insérer votre texte crypté, merci :
nopqrstuvwxyzabcdefghijklm
Le texte est décrypté et mis en net :
abcdefghijklmTUVWXYZ[\]^_`
[golgo13@localhost sources]$
***********************************************************************************************************

Là, je trouve une grosse erreur sur le programme, j'ai pas tenu compte
que le programme lit en ascii
(ascii ----------->http://www.lookuptables.com/) , c'est-à-dire, de [a à z] en ascii, c'est pas une boucle, donc comment faire pour avoir tout le message décrypté...

Je suis novice sur le langage de programmation, ce serait bien si vous pouviez me donner une aide, une syntaxe appropriée, un coucou...
(c;[)
en vous remerciant d'avance,


Bxflash
le 19.07.05

4 réponses

Messages postés
279
Date d'inscription
lundi 6 juin 2005
Statut
Membre
Dernière intervention
22 décembre 2010
51
Salut,

ce que je te conseil, je ne l'ai pas compilé mais je pense qu'il faudrait, faire un teste de plus apres
if ((str[canal] >= 97) && (str[canal] <= 122))
/*du style:*/
{
   if (str[canal]>109)
      str[canal]-=12
   else
      str[canal]+=14  
}


Bonne continuation
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci


pour le gets c'est simplement dû au fait que le gcc t'indique qu'il peut y avoir plus de caractères saisis que ce que tu as prévu dans ta chaîne.

Il est donc mieux d'utiliser :
fgets(str, nbCarMax, stdin);

voilà de cette façon plus de warning :)

Un peu tard je sais ...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
3
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
25 juillet 2005

il vaut mieux différencier les majuscules des minuscules et de pas effectué la translation si, la caractère n'est pas un lettre.

pour reboucler sur le début de l'alphabet quand on passe à une lettre supérieur à 'l', on peut utiliser la fonction modulo (%).

ça donne :

if ((str[canal] > 96) && (str[canal] < 123))
{
      str[canal] = (str[canal] - 97 + 14)%26 + 97;
}
else if ((str[canal] > 64) && (str[canal] < 91))
{
      str[canal] = (str[canal] - 65 + 14)%26 + 65;
}

Salut

Excusez-moi pour le retard, j'essayais vos idées...

Je tiens à remercier nico7382 , XtremDev et tous ceux et toutes celles
qui se sont penchés sur le problème.

Je devais rajouter des conditions pour les exceptions.

Reste maintenant les exceptions pour les majuscules et les caractères
spéciaux, ce sera pour demain.

comme celà, le programme sera complet et fonctionnel...
J'ai fait un décalage de 13, car celui de 12 bugguait c'est
l'alghoritme de Rot13 (ou Caesar?).

Merci beaucoup


/* Programme qui scanne les textes cryptées et qui les transforment en français */
#include <stdio.h>

main()
{

char str[10000];
int canal;

printf(" Insérer votre texte crypté, merci :\n");
gets (str);
canal = 0;
while (str[canal]){
if ((str[canal] >= 97) && (str[canal] <= 122))

if (str[canal]>109)
str[canal]-=13; /* retrait de 13 en ascii */
else
str[canal]+=13 ; /* ajout de 13 en ascii */




canal++;
}
printf("Le texte est décrypté et mis en net :\n");
puts(str);
return 0;
}

----------------------bxflash-----------------------------------------------