[ Je décrypte un message en C ]
Résolu
Utilisateur anonyme
-
un peu tard ... -
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
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
A voir également:
- [ Je décrypte un message en C ]
- Comment recuperer un message supprimé sur whatsapp - Guide
- Epingler un message whatsapp - Accueil - Messagerie instantanée
- Message supprimé whatsapp - Guide
- Message absence thunderbird - Guide
- Message du pere noel gratuit whatsapp - Accueil - Messagerie instantanée
4 réponses
Salut,
ce que je te conseil, je ne l'ai pas compilé mais je pense qu'il faudrait, faire un teste de plus apres
Bonne continuation
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
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 ...
Il est donc mieux d'utiliser :
fgets(str, nbCarMax, stdin);
voilà de cette façon plus de warning :)
Un peu tard je sais ...
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 :
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-----------------------------------------------
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-----------------------------------------------