Chiffrement d'un texte

Fermé
MilaMissa Messages postés 24 Date d'inscription jeudi 5 décembre 2013 Statut Membre Dernière intervention 28 avril 2015 - Modifié par Chris 94 le 14/03/2014 à 13:46
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 mars 2014 à 13:05
Bonjour,

jai un programme a faire : c'est la Transmission d'un teste chiffré
dont les caractères a transmettre seront convertis en code ascii, ensuite on procède a un décalage de 1 vers la droite (ou vers la gauche) .. en c , je suis débutante ..

9 réponses

Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 323
14 mars 2014 à 13:46
Bonjour,

CCM ne fait pas les devoirs. Des conseils peuvent être demandés mais il ne faut pas espérer obtenir la solution. De plus, le sujet doit rester dans le cadre de l'informatique et des nouvelles technologies.
0
MilaMissa Messages postés 24 Date d'inscription jeudi 5 décembre 2013 Statut Membre Dernière intervention 28 avril 2015
14 mars 2014 à 13:49
oui j'attends pas d'une solution exacte , juste des idées .. mercii
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
14 mars 2014 à 17:37
Bonjour!
Si tu veux des indications, il faut:

Mettre ta chaine de caractère dans une tableau de char;
pour chaque lettre du tableau:
la remplacer par la lettre suivante (ou précédente) dans l'alphabet.
transmettre le tableau.

Pour ce qui est d'obtenir le numéro d'une lettre:
int numero = (int)('a');

pour obtenir une lettre à partir d'un nombre:
char lettre = (char)(97);
Sachant que les lettre sont numérotées dans l'orde:
a = 97
b = 98
....
Avec ça, tu devrais pouvoir te débrouiller, normalement.
Si t'as besoin de plus d'explications, n'hésite pas.
0
MilaMissa Messages postés 24 Date d'inscription jeudi 5 décembre 2013 Statut Membre Dernière intervention 28 avril 2015
14 mars 2014 à 19:15
mercii pour ces info , mais encore le prblm est dans le décalage je sais pas comment je procède ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Franck7511 Messages postés 14296 Date d'inscription jeudi 24 décembre 2009 Statut Membre Dernière intervention 10 août 2017 1 121
14 mars 2014 à 19:55
En fait, ça passe aussi :
int lettre = '0';
ou
char lettre = 48; (voir le code ASCII)

Comme dit plus haut, tu fais un tableau de char où tu met ta chaîne et une boucle qui parcourt le tableau et remplace chaque élément de ce tableau par son successeur... Si c'est ça que tu entends par "décalage" bien sûr.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
14 mars 2014 à 20:06
Bonsoir
En ce qui concerne le chiffrement d'un mot ou d'un texte je te conseille fortement la lecture sur le chiffrement de César et Vigenère, contrairement à ce que j'ai lue jusqu'ici. je te mets sur la piste en te donnant un coup de pouce pour la suite


caractère chiffré C = ((tableaux caractère[i] + cléf[i]) modulo 26)

à bientôt
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
14 mars 2014 à 20:31
Je pensais avoir donné toutes les indications nécessaires...
Quel est ton niveau en C?
Tu pourrais nous montrer ce que tu as fais jusqu'ici, et nous dire où tu bloques?
0
MilaMissa Messages postés 24 Date d'inscription jeudi 5 décembre 2013 Statut Membre Dernière intervention 28 avril 2015
14 mars 2014 à 21:05
#include <stdio.h>
#include <string.h>
#define MAX 50

int main() {
char ch[MAX] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char c[MAX];
char t[MAX];
int N=MAX;
int i,n;
printf("donner un mot: ");
scanf("%s",&c[MAX]);
printf("donner un nmbre : ");
scanf("%d",&n);
for (i=0; i<strlen(c) ; i++) {
if (strcmp (c,ch )!= 0){

t[i] = ch[i+1];

}
else printf ("erreur");
}
printf("%s\n",&c);

return 0;
}
c'est ce ke j'ai fais :( ...
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 14/03/2014 à 22:25
Bon, tu t'es trop cassé la tête...
tu n'as pas besoin d'un tableau contenant toutes les lettres car tu peux accéder aux lettre grâce à leur numéro, comme dit plus haut.
Si tu veux un décalage de X vers la droite, tu peux faire:
for( i = 0; i < strlen(c); i++){
    t[i] = (char)(c[i] + X)
}

Je ne sais pas si tu voies où je veux en venir...
Sinon, j'ai pas vraiment compris l'intérêt de strcomp, ici.
Pour résumer, tu peux t'en sortir avec 3 variables (4 si tu ne veux pas modifier le texte original).
Si tu veux je peux te passer ton code un peu modifié fonctionnant.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
15 mars 2014 à 09:45
Bonjour
En chiffrement dans le cas de celui-ci il est préférable de chiffrer les mots ou le caractère avec une clef au lieu de le décaler de vers la droite où vers la gauche et à force de faire ça en peut au bout d'un certain temps déchiffré le message en clair, contrairement à une clef qui chiffre le message, ce qui donne également un bon coup de fil à retorde si on essaye de forcer le déchiffrage avec une autre clef ou sans;
quant au tableau il peut s'en passer mais cependant pour un début il tout à faire le droit de le garder et s'en référer, mais l'idéale est de le générer à l'aide d'une fonction

/* Pour Générer ton Tableau */
void fGentab(char *tab){
    unsigned int i , j;
    for(i = 32, j = 0 ; i < 127; i++, j++){
           tab[j]=(char)i;
    }
}

/* Pour chiffré ton mot caractère avec un mots de passe + décalage */
char fEncryptChar(char c,char *pkey){
     unsigned int i = 0;
     if (++i > strlen(pkey) ) { i = 0; }
     return (c + (pkey[i] - 26 ) );         
}


à bientôt
0
MilaMissa Messages postés 24 Date d'inscription jeudi 5 décembre 2013 Statut Membre Dernière intervention 28 avril 2015
15 mars 2014 à 22:23
si tu peu me le passé , tu me fera un grand plaisir, et je vous remerci pour votre aide ^^
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 16/03/2014 à 09:39
Bonjour,
non je ne te donnerais pas une solution toute faite et quand bien même si je te la donne, tu seras incapable de comprendre ce que j'ai fait et plus encore l'algorithme que j'ai implanté, sans oublier que tu vas t'attribuer le mérite alors que tu n'as absolument rien fait et c'est contre la règle de ce forum.
Mais par contre en peut t'aider sur ce que tu as déjà fait ,d'ailleurs je pense que j'en ai assez fait en te donnent deux fonctions majeures de ton programme
à bientôt
0
nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 16/03/2014 à 12:31
Bonjour!
Quand je t'ai parlé de ton algo corrigé, j'ai oublié de te demander si dans le texte, il y aurait aussi des caractères spéciaux et s'il fallait les décaler aussi.
Sinon, ça donnerait quelque chose comme ça:
#include <stdio.h>
#include <string.h>
#define MAX 50

int main() {
	char c[MAX] = "";
	char t[MAX] = "";
	int i,n;
	printf("donner un mot: ");
	scanf("%s",c);
	printf("donner un nmbre : ");
	scanf("%d",&n);
	for (i=0; c[i] != '\0' ; i++) {
		t[i] = (char)(c[i]+n);
	}
	printf("%s\n",c);
	printf("%s\n",t);

	return 0;
} 

Voilà! je te laisse faire les modif. pour l'adapter à tes besoins!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 mars 2014 à 13:05
Ton code ne marchera pas sur un texte mais que sur un mot...
0