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 :

Problème retour de valeur (Format Incorrect)


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Problème retour de valeur (Format Incorrect)
    Bonjour,

    Je suis actuellement en train de mettre en place un chiffrement RSA avec pour le moment des valeurs par défaut valides pour les différentes variables nécessaires.

    Pour se faire, je converti une chaine de caractère lettre par lettre en code ASCII puis stocke le résultat dans un tableau de long. Je passe sur ce tableau afin de chiffrer chaque bout via RSA et je repasse ensuite pour le déchiffrer.

    Prenons pour exemple le texte : test

    Je le converti en ASCII via la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    long *StringToAscii(char * string){
    	long *asciiTab = malloc(sizeof(long)*strlen(string));
    	for (int i = 0; i < (long)strlen(string); i++) {
    		asciiTab[i] = string[i];
    	}
     
    	return asciiTab;
    }
    J'ai donc le retour [116,101,115,116]

    Je le chiffre via RSA, je vous épargne tout le code. mais le résultat donne :
    [115,98,116,115]
    Cela n'est pas impressionnant du fait de prise de valeurs minimales pour les clés publique / privée

    Le problème est que quand je déchiffre ce code, il me retourne l'emplacement dans l'alphabet de la lettre. A savoir pour test 20,5,19,20

    J'aimerais qu'il me retourne soit l'ASCII de départ du mot test ou simplement le mot test.

    Sachant que je déchiffre avec la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    long DecryptASCII(long d, long n, long encrypted) {
        //Prevoir changement de la constante du tableau ASCII de int vers long
        long decrypted;
        //Operation de chiffrement
        decrypted = (encrypted^d)%n;
        //printf("Le String du cryptee \n\n%s", encrypted);
        return decrypted;
    }
    }
    L'affichage de ma valeur déchiffrée se fait via le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        printf("\n\nSTRING DECRYPTED ASCII TAB: ");
        for (int i = 0; i < (long)strlen(charTab); i++) {
            decryptionTab[i] = DecryptASCII(priKey.d,priKey.n ,encryptionTab[i]);
            printf("%ld", decryptionTab[i]);
            if (i < ((long)strlen(charTab)) - 1) printf(":");
            }
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Tu peux convertir ton retour 20,5,19,20 en 't', 'e', 's', 't' en rajoutant la valeur 'a' à chaque nombre.

    Maintenant on va parler d'optimisation. Déjà, tu peux passer en "unsigned long" et gagner ainsi une puissance de 2 dans ta plage de valeurs disponibles. De plus, on n'utilise jamais strlen() comme condition de fin car cette fonction balaye toute la chaine. Donc si t'as une chaine de 100 lettres ça te fera 10 000 itérations. Vaut mieux récupérer sa valeur et utiliser cette valeur comme condition de fin ou mieux, utiliser '\0' (encore que ici il vaut mieux passer par la longueur vu que ton indice est utilisé pour le second tableau et que tu as besoin de cette longueur pour ton malloc)
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned long *StringToAscii(char * string){
    	size_t len;
    	len=strlen(string);
    	unsigned long *asciiTab = malloc(sizeof(unsigned long)*len);
    	for (size_t i=0; i < len; i++) {
    		asciiTab[i]=string[i];
    	}
     
    	return asciiTab;
    }

    Ensuite concernant ton decrypted = (encrypted^d)%n ben malgré la largeur du unsigned long (2^32) tu risques quand-même de dépasser lors du calcul de l'exposant. Ceci dit, je pense que le résultat ne changera pas vu que (x%n) devrait être (selon moi) égal à (x%(2^32)%n). Mais c'est à vérifier.
    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]

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    long *StringToAscii(char * string){
    	long *asciiTab = malloc(sizeof(long)*strlen(string));
    	for (int i = 0; i < (long)strlen(string); i++) {
    		asciiTab[i] = string[i];
    	}
     
    	return asciiTab;
    }
    Soit tu n'as pas compris ce qu'on s'est raconté ici, soit je ne comprend pas du tout l'intérêt de ce code...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Soit tu n'as pas compris ce qu'on s'est raconté ici, soit je ne comprend pas du tout l'intérêt de ce code...
    C'est vrai qu'en y réfléchissant, effectivement stocker 'a' dans du char ou dans du "unsigned long" ça ne change rien.
    Sauf peut-être qu'ensuite, la valeur stockée est transformée via le calcul RSA et que ce type de calcul peut donner du nombre dépassant la plage 0-255.
    Si par exemple je prends P=89, Q=97 ça donne un nombre delta=(P-1)*(Q-1)= 8448; et un nombre N=P*Q=8633.
    Si ensuite je prends e tel que e et delta soient premiers entre eux (par exemple 35) (alors ma clef publique sera (8633, 35) et ma clef privée sera un nombre "d" compris entre 35 et 8448 tel que (d*35) % 8448 == 1 (exemple 1931).
    Si ensuite je chiffre la lettre 'a' (97) sur ma clef publique (8633, 35) ça donne 97^35%8633=776. Que je peux déchiffrer sur ma clef privée 1931 selon le calcul 776^1931%8633=97
    Et je peux signer la même lettre 'a' (97) sur ma clef privée 1931 avec le calcul 97^1931%8633=1552 que j'authentifie sur ma clef publique (8633, 35) avec le calcul 1552^35%8633=97.
    Mais les calculs intermédiaires donnent des nombres dépassant le char...
    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]

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Bonjour,


    Soit tu n'as pas compris ce qu'on s'est raconté ici, soit je ne comprend pas du tout l'intérêt de ce code...
    De ce que j'ai compris de tes explications, c'est que c'est l'affichage qui défini si je veux montrer du ASCII, du String ou autre. Cependant, cela ne me permet pas de travailler avec ces valeurs mais juste de les montrer. J'aimerais pouvoir stocker dans un tableau pour ensuite travailler un à un les valeurs.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    A l'affichage, tu décides comment afficher. Mais la donnée reste inchangée. Un tableau de caractères est un tableau d'entiers.

    Exemple :
    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
    #include <stdio.h>
     
    void modify(char* array)
    {
        for (size_t i = 0; array[i] != 0; ++i)
        {
            array[i] += 1;
        }
    }
     
    int main()
    {
        char array[] = "un message";
        puts(array);
        modify(array);
        puts(array);
     
        char other[] = "abcd EDFG";
        puts(other);
        modify(other);
        puts(other);
    }
    Sortie:
    un message
    vo!nfttbhf
    abcd EDFG
    bcde!FEGH
    La seule raison de ne pas travailler sur le tableau d'origine est si tu souhaites stocker des valeurs supérieures à 255. A ce moment, il faut créer un nouveau tableau et y copier les donner (il s'agit bien de copier et non véritablement de convertir).

    Citation Envoyé par Sve@r Voir le message
    Mais les calculs intermédiaires donnent des nombres dépassant le char...
    Les calculs intermédiaires bénéficient de la promotion des entiers, comme tout calcul. Il faut regarder la plage des valeurs de sortie

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Avec cet exemple je comprends mieux le principe, tu fais donc l'incrémentation de 1 de la valeur ASCII de chaque caractères et donc tu obtiens en retour le code ASCII+1, et donc quand tu print, ça te renvoit la lettre qui correspond.

    Je vais essayé de restructurer mon code pour utiliser ce principe là. Je reviens vers vous une fois les changements effectués si des problèmes apparaissent.

    Merci pour l'explication.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    L'ordinateur il s'en contrefout que ce soit de l'ascii ou l'âge du capitaine. Il a juste des octets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    int main()
    {
    	const char* data = "juste des caracteres..";
    	const int size = sizeof(data) / sizeof(data[0]);
    	for (int i = 0; i < size; ++i)
    	{
    		printf("%c == %d == 0x%x\n", data[i], data[i], data[i]);
    	}
    	return 0;
    }
    Peut-être que là tu comprendras enfin les réponses données dans le sujet précédent..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Les calculs intermédiaires bénéficient de la promotion des entiers, comme tout calcul. Il faut regarder la plage des valeurs de sortie
    Oui mais ce que je veux dire, c'est que peut-être désire-t-il stocker les valeurs de départ (sa chaine) dans un tableau capable ensuite de stocker les nombres calculés. Après-tout, si 'a' (97) chiffré donne 776 ben il faut bien stocker ce "776" quelque part pour pouvoir ensuite tester le déchiffrement. Et idem pour les autres valeurs...

    Citation Envoyé par dzerko Voir le message
    Avec cet exemple je comprends mieux le principe, tu fais donc l'incrémentation de 1 de la valeur ASCII de chaque caractères et donc tu obtiens en retour le code ASCII+1, et donc quand tu print, ça te renvoit la lettre qui correspond.
    J'ai pas dit +1 mais + 'a' (ce qui est d'ailleurs une erreur car la formule exacte c'est + 'a' - 1). Si t'as par exemple x=1 et que tu lui ajoutes 'a' -1 (96) ça te donnera alors x=97. Et si tu affiches ce "x" au format "%c" printf("%c", x) ça t'affiche un 'a' à l'écran.
    Mais effectivement, si ensuite tu as x='a' (97) et que tu lui ajoutes 1, ça te donne x=98 et si tu affiches ce "x" alors ça te donne 'b' (uniquement bien sûr parce que la table des codes ascii suit l'ordre de l'alphabet).

    Ceci dit, quoi qu'il arrive c'est bizarre ton résultat car si tu regardes mon exemple de cet après-midi, alors en partant de 116 ('t' de "test") que tu chiffres et déchiffres tu devrais te retrouver au final à 116 et non pas à 20 (et idem pour toutes les autres valeurs). On sent bien que ton calcul "semble" correct puisqu'en partant de "test" tu te retrouves au final avec les positions alphabétiques de 't', 'e', 's' et 't' mais tu as dû faire un truc de trop (un décalage?) que tu n'aurais pas dû faire.
    D'autant plus que (d'après toi) ce "20" que tu obtiens correspond à la vingtième lettre donc 't' mais ça pourrait aussi être 'T'...
    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]

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    J'ai pas dit +1 mais + 'a' (ce qui est d'ailleurs une erreur car la formule exacte c'est + 'a' - 1). Si t'as par exemple x=1 et que tu lui ajoutes 'a' -1 (96) ça te donnera alors x=97. Et si tu affiches ce "x" au format "%c" printf("%c", x) ça t'affiche un 'a' à l'écran.
    Mais effectivement, si ensuite tu as x='a' (97) et que tu lui ajoutes 1, ça te donne x=98 et si tu affiches ce "x" alors ça te donne 'b' (uniquement bien sûr parce que la table des codes ascii suit l'ordre de l'alphabet).
    Dans mon cas, j'ai utilisé ton erreur en incrémentant de 1 et il me retourne bien le ASCII suivant. Pour t qui est 116, il m'affiche ensuite 117, qui en affichage %c me donne u.

    Peut être les deux manières fonctionnent.

    Et comme tu dis plus tôt, je veux effectivement stocker ces valeurs ASCII format String dans un tableau afin de les manipuler (Ajout de 0 et séparation en 3 bits puis 4 bits après second ajout de zéro). Cela serait donc intéressant d'utiliser une formule qui renvoie les valeurs ASCII dans un nouveau tableau ?

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dzerko Voir le message
    Dans mon cas, j'ai utilisé ton erreur en incrémentant de 1 et il me retourne bien le ASCII suivant. Pour t qui est 116, il m'affiche ensuite 117, qui en affichage %c me donne u.
    Ta question initiale était "comment à partir de 20 obtenir 't'". Et pour ça, il te faut additionner 'a' puis retrancher 1.
    Maintenant tu dis qu'à partir de 20 tu veux 'u' ce n'est donc plus la même chose.

    Citation Envoyé par dzerko Voir le message
    Et comme tu dis plus tôt, je veux effectivement stocker ces valeurs ASCII format String dans un tableau afin de les manipuler
    Hum... "valeur ASCII format String" connait pas. De plus, encore une fois, on ne stocke que du nombre, on ne stocke pas des formats. Le format c'est à l'affichage qu'on le demande.

    Citation Envoyé par dzerko Voir le message
    Cela serait donc intéressant d'utiliser une formule qui renvoie les valeurs ASCII dans un nouveau tableau ?
    Pas de souci
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char orig[]="Hello"
    char copie[100];
     
    size_t len=strlen(orig);
    for (size_t i=0; i < len; i++) copie[i]=orig[i];

    Et ça fonctionne quel que soit le type de "copie".
    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]

  12. #12
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Oui mais ce que je veux dire, c'est que peut-être désire-t-il stocker les valeurs de départ (sa chaine) dans un tableau capable ensuite de stocker les nombres calculés. Après-tout, si 'a' (97) chiffré donne 776 ben il faut bien stocker ce "776" quelque part pour pouvoir ensuite tester le déchiffrement. Et idem pour les autres valeurs...
    C'est bien de ça dont je parle ! Là, pas le choix : il faut d'abord copier dans un tableau de short (ou (u)int16_t si on veut s'assurer de la largeur exacte).

  13. #13
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ta question initiale était "comment à partir de 20 obtenir 't'". Et pour ça, il te faut additionner 'a' puis retrancher 1.
    Maintenant tu dis qu'à partir de 20 tu veux 'u' ce n'est donc plus la même chose.
    Effectivement je me suis emmêlé les pinceaux avec les différents commentaires. J'ai compris ton +a -1. J'ai changé un peu mon code et pour le moment tout va bien. Je reviendrais vers vous pour d'éventuelles questions.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Re Bonjour à vous tous,

    Je n'arrive toujours pas à faire ce que je veux. Malgré vos différentes explications je bloque toujours. Je vais reformuler de manière à être le plus compréhensible possible.

    J'aimerais avoir un programme capable de demander une chaine de caractère.

    Celle ci sera stockée afin de pouvoir me stocker en format char (Et non pas en nombre) la valeur ASCII de chaque lettre. Je m'explique, mon but étant de faire des conditions (if) sur ces nombres. je souhaite convertir toutes les valeurs ASCII sur 3bits. Par exemple, la valeur "a" correspond à 97. J'aimerais la convertir en "097". Prenons un exemple :
    Tapez votre chaine : "actya"
    On a donc la valeur ASCII du mot actya lettre par lettre 97 99 116 121 97 .
    A partir de la je veux pouvoir stocker chaque ASCII au format String afin de faire des strcpy() pour ajouter les zéros qui vont bien comme ceci : 097 099 116 121 097.

    La notion que je n'arrive pas à assimiler est la manipulation de ces ASCII dans un format chaine.

    Je vous remercie d'avance.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    On t'indique depuis plusieurs jours/semaines que l'affichage n'a rien à voir. Vouloir stocker une information ASCII n'a pas grand sens et est très sûrement contre-productif au possible. En particulier si c'est juste pour "pouvoir faire des strcpy" alors que tu peux te contenter d'utiliser les opérateurs d'assignation des chiffres...
    printf("a == %03d", 'a'); sortira bien a == 097
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2016
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Je cherche a chiffrer ce code ASCII via le RSA, et donc je dois regrouper ces chiffres sur 3 puis 4 bits, l'affichage du code ASCII en lui même ne m’intéresse pas.

  17. #17
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dzerko Voir le message
    je souhaite convertir toutes les valeurs ASCII sur 3bits. Par exemple, la valeur "a" correspond à 97. J'aimerais la convertir en "097".
    Hééé mais ça ce ne sont pas 3 bits ! Ce sont 3 caractères !

    En fait tu veux une chaîne de caractères contenant une représentation textuelle des codes ASCII d'une autre chaîne ?

    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
    #include <stdio.h>
    #include <string.h>
     
    #define SIZE    248 // valeur bidon, a definir proprement
    int main()
    {
        const char* original = "abcd bonjour";
        char result[SIZE] = {0};
        for (size_t i = 0; i < strlen(original); ++i)
        {
            sprintf(result + 4 * i, "%.3d ", *(original + i));
        }
     
        puts(result);
    }
    097 098 099 100 032 098 111 110 106 111 117 114 

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Les algos de ce type fonctionnent normalement avec des buffers, et le contenu du buffer est sans importance.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  19. #19
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Je tente ma chance : ce que l'on voudrait te faire comprendre ici c'est que tu devrais t'efforcer de chiffrer directement le contenu brut du buffer d'entrée, sans chercher à l'interpréter.

    Tu confonds peut-être chiffrement, l'action de dissimuler une information contenue dans un message, et encodage, l'action de traduire une information sous une forme qui peut être stockée et traitée par la machine. Quand on effectue la première action, on se fout de savoir comment a été réalisée la seconde. On chiffre de la même manière du texte encodé en UTF-8, en ASCII, en ISO-8859-1, contenu dans une image JPEG, dans un flux vidéo, tapé à l'envers en sautant à cloche-pied..

  20. #20
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bktero Voir le message
    En fait tu veux une chaîne de caractères contenant une représentation textuelle des codes ASCII d'une autre chaîne ?
    Je commençais à me dire que c'était peut-être effectivement son but

    Citation Envoyé par Bktero Voir le message
    for (size_t i = 0; i < strlen(original); ++i)
    Rhooo !!!
    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]

Discussions similaires

  1. [MySQL] Problème: Mauvais retour de valeur dans mysql
    Par Krabbos dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/05/2011, 15h09
  2. Optimisation multiplication complexe : problème de retour de valeur en double
    Par Antonin08 dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 06/06/2008, 08h52
  3. Réponses: 23
    Dernier message: 28/05/2008, 17h53
  4. Nouvelle installation MySql4.0.2d - Problème retour chariot
    Par pit_bulle dans le forum Installation
    Réponses: 2
    Dernier message: 30/09/2004, 16h07
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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