IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

cryptage d'un message


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 35
    Par défaut cryptage d'un message
    Bonsoir voilà j'ai un petit problème de logique,... voilà je dois saisir un caractère et un autre caractère qui servira pour le cryptage , je m'explique, si l'utilisateur saisit la lettre A , et saisit la lettre B pour le cryptage , étant donné que B est la deuxième lettre de l'alphabet, A+2=C etc.... sa c'est fait..
    Maintenant je dois le faire de même en utilisant un vecteur message(msg) et un vecteur clé(key) qui servira à crypter le message.

    mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    /**************************************************/
    /*                                                */
    /*                                                */
    /*                                                */
    /*                                                */
    /**************************************************/
     
     
     
     
     
     
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
     
     
     
     
     
     
    void main()
     
    {
     
    char msg[100] , key[100];
    int nbel,nkey,i,j,temp;
     
    printf("Saisir le nbel :");
    scanf("%d",&nbel);
     
    /* Saisi des caractères du message */
    for(i=0;i<nbel;i++)
     
    	{
     
    	fflush(stdin);
    	printf("saisir le %d ieme caractere  :",i+1);
    	scanf("%c",&msg[i]);
     
     
    	}
     
    for(i=0;i<nbel;i++)
     
    	{
     
    	printf("%c",msg[i]);
     
     
    	}
     
    printf("\n");
     
    /* Saisi des caractères pour le cryptage */
    printf("Saisir nkey de cryptage :");
    scanf("%d",&nkey);
     
    for(j=0;j<nkey;j++)
    	{
     
    	fflush(stdin);
    	printf("saisir la cle de cryptage %d: ",j+1);
    	scanf("%c",&key[j]);
     
    	}
     
    for(j=0;j<nkey;j++)
    	{
     
    	printf("%c",key[j]);
     
     
    	}
     
    printf("\n");
     
    /* Cryptage A-Z */
     
     
     
    	for(i=0;i<nbel;i++)
    	{
    		for(i=0;j<nkey;j++)
    		{
     
     
     
    			if(msg[i]>=65 && msg[i]<=90)
    			{
    			temp=msg[i]+key[j]-64;
    			msg[i]=temp;
    			}
    				if(temp>=91)
     
    				{
     
    				temp=temp-26;
    				msg[i]=temp;
     
    				}	
     
     
    		}
     
     
     
    	}
     
     
    for(i=0;i<nbel;i++)
    {
     
    printf("%c",msg[i]);
     
    }
     
     
    }
    aidez moi !
    Merci d'avance

    ps : niveau débutant

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 67
    Par défaut
    Je ne sais pas si j'ai bien compris ce qui te posait problème mais voila ce que je propose:
    l'idee est de recuperer dabord la taille de ta cle soit size_key (avec strlen() par exemple et oublie pas dinclure string.h).
    et donc apres tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mess[i] = mess[i] + key[i % size_key]
    A priori tu doi retomber sur une lettre de l'alphabet apres donc oublie pas de faire apres un bon modulo ;-)


    juste petite question de vocabulaire : "cryptage" est un mauvais anglissisme
    on parle de chiffrement/dechiffrement et de decryptage lorsque tu accede au message clair sans avoir la cle!!

    En tout cas jespere tavoir apporté un embryon de reponse qui te permetra d'avancer

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 35
    Par défaut
    je n'ai pas encore vu le size_key en cours de base prog

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 408
    Par défaut
    bonsoir,

    si j'ai bien compris le probleme tu doit coder un message de taille n avec un cles de taille m.
    si m = n c'est relativement simple: il te suffi de faire une boucle pour repeter n fois l'opperation de codage unitaire (avec un caractere).
    dans le cas contraire il manque des infos pour resoudre le probleme.

    remarque: size_key dans le message de barbsbou juste le nom qu'il a donné a une variable representant la taille de la cles.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par C/C++ Voir le message
    Bonsoir voilà j'ai un petit problème de logique,... voilà je dois saisir un caractère et un autre caractère qui servira pour le cryptage , je m'explique, si l'utilisateur saisit la lettre A , et saisit la lettre B pour le cryptage , étant donné que B est la deuxième lettre de l'alphabet, A+2=C etc.... sa c'est fait..
    Maintenant je dois le faire de même en utilisant un vecteur message(msg) et un vecteur clé(key) qui servira à crypter le message.
    T'as un exemple simple de chiffrement qui utilise une lettre pour le message et une lettre pour la clef. Transforme cet exemple en algo, place l'algo dans une fonction dédiée puis ensuite il te suffit de balayer en parallèle
    - le vecteur message
    - le vecteur clef
    Et d'appeler la fonction pour la lettre en cours avec la clef en cours. C'est le principe de l'algorithmie qui est de décomposer un problème complexe en tâches élémentaires et d'appeler les tâches voulues au moment adéquat.

    Citation Envoyé par C/C++ Voir le message
    mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    /**************************************************/
    /*                                                */
    /*                                                */
    /*                                                */
    /*                                                */
    /**************************************************/
     
     
     
     
     
     
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
     
     
     
     
     
     
    void main()
     
    {
     
    char msg[100] , key[100];
    int nbel,nkey,i,j,temp;
     
    printf("Saisir le nbel :");
    scanf("%d",&nbel);
     
    /* Saisi des caractères du message */
    for(i=0;i<nbel;i++)
     
    	{
     
    	fflush(stdin);
    	printf("saisir le %d ieme caractere  :",i+1);
    	scanf("%c",&msg[i]);
     
     
    	}
     
    for(i=0;i<nbel;i++)
     
    	{
     
    	printf("%c",msg[i]);
     
     
    	}
     
    printf("\n");
     
    /* Saisi des caractères pour le cryptage */
    printf("Saisir nkey de cryptage :");
    scanf("%d",&nkey);
     
    for(j=0;j<nkey;j++)
    	{
     
    	fflush(stdin);
    	printf("saisir la cle de cryptage %d: ",j+1);
    	scanf("%c",&key[j]);
     
    	}
     
    for(j=0;j<nkey;j++)
    	{
     
    	printf("%c",key[j]);
     
     
    	}
     
    printf("\n");
     
    /* Cryptage A-Z */
     
     
     
    	for(i=0;i<nbel;i++)
    	{
    		for(i=0;j<nkey;j++)
    		{
     
     
     
    			if(msg[i]>=65 && msg[i]<=90)
    			{
    			temp=msg[i]+key[j]-64;
    			msg[i]=temp;
    			}
    				if(temp>=91)
     
    				{
     
    				temp=temp-26;
    				msg[i]=temp;
     
    				}	
     
     
    		}
     
     
     
    	}
     
     
    for(i=0;i<nbel;i++)
    {
     
    printf("%c",msg[i]);
     
    }
     
     
    }
    aidez moi !
    Merci d'avance

    ps : niveau débutant
    1) mets des commentaires qui te permettront de suivre en toi-même le fil de ton raisonnement pendant que tu le codes et qui nous permettront de comprendre ton idée
    2) évite d'utiliser des tests sur des nombres magiques tels que 65 ou 90. Utilise plutôt les routines dédiées "isalpha()", "isupper()" etc. Ces routines sont faites pour ça et si un jour la table de correspondance change ton programme fonctionnera toujours. Et si t'as pas encore vu ces routines alors utilise la notation littérale 'A' ou 'Z' (qui est implicitement convertie en code ascii correspondant)

    Sinon "main" est de type "int". Pour le reste c'est un problème d'analyse et de découpage...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par C/C++ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char msg[100] , key[100];
    printf("Saisir le nbel :");
    scanf("%d",&nbel);
    /* Saisi des caractères du message */
    for(i=0;i<nbel;i++)
    {
    	fflush(stdin);
    	printf("saisir le %d ieme caractere  :",i+1);
    	scanf("%c",&msg[i]);
    }
    msg a une taille fixée en dure (100) et tu ne vérifies pas que nbel n'est pas supérieur à cette taille (pareil pour key). D'autre part, il serait plus simple de faire un qui est plus sûr, et qui t'évite d'utiliser fflush(stdin) qui a un comportement indéterminé et une boucle pour lire ton message.

    Citation Envoyé par C/C++ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i=0;i<nbel;i++)
    {
    	printf("%c",msg[i]);
    }
    printf("\n");
    c'est plus simple de rajouter un '\0' à la fin et de faire un
    Citation Envoyé par C/C++ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<nbel;i++)
    	{
    		for(i=0;j<nkey;j++)
    		{
    je pense qu'il s'agit d'une erreur d'inadvertance.

Discussions similaires

  1. Cryptage de messages entre un master et un slave
    Par Porshe dans le forum Débuter
    Réponses: 4
    Dernier message: 23/03/2014, 12h30
  2. cryptage d'un message
    Par malak2610 dans le forum Protocoles
    Réponses: 2
    Dernier message: 30/04/2013, 11h42
  3. Message clair/message crypté: comment deviner l'algo de cryptage
    Par VinnieMc dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/05/2011, 21h35
  4. [cryptage] crypter un message
    Par joe Lafousse dans le forum Sécurité
    Réponses: 9
    Dernier message: 21/12/2010, 15h04
  5. cryptage d'un message
    Par s-ehtp dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 26/11/2007, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo