[C++ 10 lignes inside] Probleme avec programme de cryptage XOR

Probleme avec programme de cryptage XOR [C++ 10 lignes inside] - C++ - Programmation

Marsh Posté le 12-12-2003 à 22:54:36    

:hello:  
 
je fait un petit programme de cryptage en ou exclusif et puisque j'y connait pas grand chose au c++ j'y vais doucement
au depart jai fait un prgm qui fait qu'une lettre jai pas eu de prob :D  
mais là je veux pouvoir entrer du texte et j'ai quelques probs
voila la bete:
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main(void)
  4. {
  5. char clai='A';
  6. int i=0;
  7. char tablo [500];
  8. char tablocryptaid [500];
  9.    cout << "Entrez Clef: \n";
  10.    cin >> clai;
  11.    cout << "Entrez Texte A Crypter: \n";
  12.    cin >> tablo;
  13.    for (i=0; i<500; i++)
  14.    {
  15.    tablocryptaid[i]=tablo[i] ^ clai;  //c la que se fait la fonction XOR
  16.    }
  17.    cout << tablocryptaid << endl;
  18.    return 0;
  19. }


notez que la cle ne fait qu'un caractere
et pour ecrire un texte pour le moment jai pas trouvé mieu que le tablo (le pb vien peut etre de la) et ce qui est chiant en + c que je peu pas mettre d'espaces :(
pis bon si y a surement plein de ptits trucs pas coherent...
mais le probleme c'est que soit j'initialise i à 1 dans le 'for' et la 'tablocryptaid' me donne rien
sit je l'initialise a 0 et la 'tablocryptaid' contient nimporte quoi (en genenral quelques bip de ma tour (caracteres foireux :??:) mais genre je met 500 fois la meme lettre ca me rend 500 lettres differentes alors que XOR devrait rendre la meme)
merci de votre aide (faut vite que je pige ca parce qu'apres je doit essayer de faire un prog qui utilise RSA...)

Reply

Marsh Posté le 12-12-2003 à 22:54:36   

Reply

Marsh Posté le 12-12-2003 à 23:51:48    

remplace tes char [] par des string
pour lire une ligne : std::getline(cin, str)
quand a tes caracteres foireux tu t'es demandé ce que donne 'a'^'b' ?

Reply

Marsh Posté le 12-12-2003 à 23:54:08    

hellbilly a écrit :

remplace tes char [] par des string
pour lire une ligne : std::getline(cin, str)
quand a tes caracteres foireux tu t'es demandé ce que donne 'a'^'b' ?


 [:romf]  
a part ca si je fait un prog XOR c'est que je sait un minimum comment la fonction opere...
la genre je fait a^b ca me met 500caracteres différents les uns des autres

Reply

Marsh Posté le 12-12-2003 à 23:58:06    

Mister_K a écrit :


 [:romf]  
a part ca si je fait un prog XOR c'est que je sait un minimum comment la fonction opere...
la genre je fait a^b ca me met 500caracteres différents les uns des autres


 
j'aime ta fonction d'affichage. Affiche plutot caractere par caractere

Reply

Marsh Posté le 13-12-2003 à 00:02:37    

chrisbk a écrit :


 
j'aime ta fonction d'affichage. Affiche plutot caractere par caractere


:??:
comment ca

Reply

Marsh Posté le 13-12-2003 à 00:04:37    

Bah si dans ton texte y'a la lettre qui sert de clé, l'affichage s'arrêtera à cet index x^x=0

Reply

Marsh Posté le 13-12-2003 à 00:09:24    

ahhhhh ok :jap:
ok dans ce cas comment je peut faire pour pas que ca me casse mon texte et meme comment je peut faire pour entrer un texte dans le tablo sans que les espaces n'arretent la chaine :??: (jai pas compris le caractere par caractere je doit faire 500 fois cin ?)

Reply

Marsh Posté le 13-12-2003 à 00:15:30    

getline(cin, tonstring);
 
Edit pour pas que Taz me frappe : tu peux aussi vérifier le retour de getline() et si ça merde vérifier cin.bad() et cin.eof() pour afir en conséquences..


Message édité par *syl* le 13-12-2003 à 00:17:52
Reply

Marsh Posté le 13-12-2003 à 00:19:18    

int main(void)
 
(void) -> ()
 
return 0; inutile car implicite
 

Reply

Marsh Posté le 13-12-2003 à 00:28:40    

*Syl* a écrit :

getline(cin, tonstring);
 
Edit pour pas que Taz me frappe : tu peux aussi vérifier le retour de getline() et si ça merde vérifier cin.bad() et cin.eof() pour afir en conséquences..


heu... du coup pour le "char tablo[500]" je doit mettre autre chose a la place non?

Reply

Marsh Posté le 13-12-2003 à 00:28:40   

Reply

Marsh Posté le 13-12-2003 à 00:32:05    

ben tu utilises ta string, re vois pas le problème. si pour faire ton traitement ta string doit absolument faire 500c, et bien tu la bourre

Reply

Marsh Posté le 13-12-2003 à 00:32:21    

Tu mets des string à la place des char .|

Reply

Marsh Posté le 13-12-2003 à 00:41:14    

je dois avoir l'air d'un autiste mais,
j'ai mis ca (je decouvre le string  [:spamafote] )

Code :
  1. {
  2. char clai='A';
  3. int i=0;
  4. string tablo[500];
  5. string tablocryptaid[500];
  6.    cout << "Entrez Clef: \n";
  7.    cin >> clai;
  8.    cout << "Entrez Texte A Crypter: \n";
  9.    getline(cin, tablo);
  10.    for (i=0; i<500; i++)
  11.    {
  12.    tablocryptaid[i]=tablo[i] ^ clai;
  13.    }


et au niveau du getline il me met une erreur comme quoi ca "does not match" (pas taper svp)
d'ailleur au nivo de la fonction XOR aussi:/
 
edit: g rien dit c bon jai enlevé les [500]


Message édité par Profil supprimé le 13-12-2003 à 00:42:28
Reply

Marsh Posté le 13-12-2003 à 00:42:15    

gargleuh
tu fais des tableau de strings la [:totoz]

Reply

Marsh Posté le 13-12-2003 à 00:42:17    

string tablocryptaid[500];
 
euh vas y c'est quoi pour toi ça ?

Reply

Marsh Posté le 13-12-2003 à 00:45:05    

Code :
  1. #include <iostream>
  2. #include <string>
  3. int main()
  4. {
  5.   std::string input;
  6.   char c;
  7.   std::cin >> c;
  8.   std::getline(std::cin, input);
  9.   for(std::size_t i=0; i<input.size(); ++i)
  10.     {
  11.       input[i]^=c;
  12.     }
  13. }

bon allez sinon tu vas pas dormir

Reply

Marsh Posté le 13-12-2003 à 00:54:00    

jcrois que je vais aller me chercher du café :sweat:

Reply

Marsh Posté le 13-12-2003 à 01:35:00    

help! je suis relou mais j'y arrive pas
maintenant le probleme c l'affichage de la resultant de XOR
j'ai ca

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. char clai='A';
  7. int i=0;
  8. std::string tablo;
  9. std::string tablocryptaid;
  10.    cout << "Entrez Clef: \n";
  11.    cin >> clai;
  12.    cout << "Entrez Texte A Crypter: \n";
  13.    std::cin >> tablo;
  14.    std::getline(std::cin, tablo);
  15.  
  16.    for (std::size_t i=0; i<tablo.size(); i++)
  17.    {
  18.    tablocryptaid[i]=tablo[i] ^ clai;
  19.    }
  20.    cout << tablocryptaid << endl;
  21. }


 
et ca me demande les deux variables mais ca n'affiche pas la resultante :/
idem avec ce que m'a fait Taz...
il doit y avoir un truc special a mettre sur le 'cout' non?

Reply

Marsh Posté le 13-12-2003 à 01:38:33    

normal, dnas ma version y a pas d'affichage.
t'es sur de savoir ce que fait xor ?
 
       std::cin >> tablo;
       std::getline(std::cin, tablo);
 
ben tu lis 2 fois : une fois un mot, l'autre une ligne
 
ça affiche rien ?
tablocryptaid[i]=tablo[i] ^ clai;
 
boum, t'as pas tailler tablocryptaid comme il faut. -> std::string::resize
 
ensuite, t'es marrant, tablocryptaid est pas affichable puisque 'apères XOR, il contient des caracètres non-imprimables.
 
 
tu préfères pas jouer avec ROT13 ?
 

Reply

Marsh Posté le 13-12-2003 à 13:45:30    

bah sur ta version j'ai quand meme ajouter des cout et cin << input...
ensuite pour le resizage jsuis pas sur de tout avoir calé :/
et quand je teste le programme je m'arrange pour XORer des lettres qui tombent bien
bon jvai faire des recherches sur ROT13 :jap: sinon je laisse tomber le string et je repart sur le tablo...

Reply

Marsh Posté le 13-12-2003 à 13:49:29    

1) reste sur les string sinon tu vas dans le mur (en fait t'y était déjà)
2) si ton but c'est de crypter une chaine de caractère (texte humainement lisible), tourne toi vers les trucs à la ROT13, Avocat, signé l'abbé, etc
3) faut se sortir les doigts et lire un peu de documentation.

Reply

Marsh Posté le 13-12-2003 à 14:52:50    

Mister_K a écrit :


 [:romf]  
a part ca si je fait un prog XOR c'est que je sait un minimum comment la fonction opere...


+1 taz
 
Oui t'as l'air de maîtriser le sujet en effet...

Reply

Marsh Posté le 13-12-2003 à 15:06:30    

JagStang a écrit :


+1 taz
 
Oui t'as l'air de maîtriser le sujet en effet...


bah desolé mon minimum c'est 1^0=1 1^1=0 0^0=0 et 0^1=1  [:spamafote]  
apres j'ai pas dit que j'etait un mega pro du ou exclusif


Message édité par Profil supprimé le 13-12-2003 à 16:25:32
Reply

Marsh Posté le 13-12-2003 à 16:23:50    

Mister_K a écrit :


bah desolé mon minimum c'est 1^0=1 1^1=0 0^0=1 et 0^1=1  [:spamafote]  
apres j'ai pas dit que j'etait un mega pro du ou exclusif

Wé bah va réapprendre ton minimum [:rofl2]

Reply

Marsh Posté le 13-12-2003 à 16:26:29    

*Syl* a écrit :

Wé bah va réapprendre ton minimum [:rofl2]

arf ouai erreur d'innatention pour le 0^0 [:cupra]

Reply

Marsh Posté le 13-12-2003 à 16:27:27    

c'est bien ce que je disais.... pour info, 0^0=0...
 
http://www.sciences.ch/htmlfr/anal [...] mboole.php
a+

Reply

Marsh Posté le 13-12-2003 à 16:43:13    

JagStang a écrit :

c'est bien ce que je disais.... pour info, 0^0=0...
 
http://www.sciences.ch/htmlfr/anal [...] mboole.php
a+


merci j'avais pas vu j'avais pas remarqué que c'etait une faute d'inattention et j'avais pas édité mon message avant que tu ne donne cette reponse

Reply

Marsh Posté le 13-12-2003 à 16:51:47    

bon a part ca,
je crois que le (dernier) probleme vien du fait que
          "tablocryptaid[i]=tablo[i] ^ clai;"
ne fonctionne pas
ca expliquerait pourquoi  
           cout << tablocryptaid  
ne donne rien a la fin
en effet j'ai rajouté
           tablocryptaid.resize(500, 'x');  
juste avant le cout et ca me met que des 'x' quelle que soit le texte et la clee...
alors que les premiers caracteres avant les x devrais etre le texte crypté (tout ca pour dire que le probleme ne vient donc pas du cout)


Message édité par Profil supprimé le 13-12-2003 à 16:52:48
Reply

Marsh Posté le 13-12-2003 à 16:54:09    

...
 
'a' ^ 'b' tu crois que ça donne quoi ?

Citation :

tablocryptaid.resize(500, 'x');  
juste avant le cout et ca me met que des 'x' quelle que soit le texte et la clee...

ça me parait une bonne définition de ce que fait resize.

Reply

Marsh Posté le 13-12-2003 à 17:01:13    

Taz a écrit :

...
 
'a' ^ 'b' tu crois que ça donne quoi ?

Citation :

tablocryptaid.resize(500, 'x');  
juste avant le cout et ca me met que des 'x' quelle que soit le texte et la clee...

ça me parait une bonne définition de ce que fait resize.


ben a^b ca donne un coeur non :??:
ensuite le resize je croyais que c'etait sensé remplir les espaces vides du string  
genre 'abc' fait 3 caracteres et si tablocryptaid='abc' alors avec mon resize ca fait 'abcxxxxxxxxx[...]' avec 497 x
c pas ca :??:

Reply

Marsh Posté le 13-12-2003 à 17:03:34    

[:rofl]
(je ris mais c'est nerveux je pense)

Reply

Marsh Posté le 13-12-2003 à 17:06:05    

Taz a écrit :

[:rofl]
(je ris mais c'est nerveux je pense)


desolé le 'string' je connais que depuis hier
apres ce que j'ai dit sur le resize je l'ais lu plus ou moins là
http://casteyde.christian.free.fr/ [...] ml#AEN5711

Citation :

 
 
string s("123" );
s.resize(10, 'a');
 
Dans cet exemple, s contient finalement la chaîne de caractères "123aaaaaaa".  


j'ai peut-etre mal interprété


Message édité par Profil supprimé le 13-12-2003 à 17:06:26
Reply

Marsh Posté le 13-12-2003 à 17:07:13    

conseil du jour: essaie avec toutes les touches de ton clavier jusqu'a obtenir le résultat désiré

Reply

Marsh Posté le 13-12-2003 à 17:18:34    

Je ne comprends pas comment son truc ne plante pas avec le resize juste avant le cout.

Reply

Marsh Posté le 13-12-2003 à 17:19:42    

hellbilly a écrit :

Je ne comprends pas comment son truc ne plante pas avec le resize juste avant le cout.

euh c'est quoi le problème ?

Reply

Marsh Posté le 13-12-2003 à 17:33:26    

Taz a écrit :

euh c'est quoi le problème ?


tablocryptaid[i]
...
tablocryptaid.resize()
cout << ...

Reply

Marsh Posté le 13-12-2003 à 18:09:10    

ca yest ca donne plus ou moins quelque chose  :)  

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main(void)
  5. {
  6. char cle='a';
  7. int i=1;
  8. string chaine;
  9. string chainecryptee;
  10.     cin >> cle;
  11.        
  12.     getline(cin, chaine);
  13.     chaine.resize(500);
  14.    
  15.     for(i=1; i<501; i++)
  16. {
  17.     chainecryptee[i] = cle ^ chaine[i];
  18.    
  19. }
  20.     cout << chainecryptee << endl;
  21. }


 
je tient a remercier tout ceux qui ne m'ont pas fait perdre mon temps  :jap:  
il reste aussi que je ne peut pas valider séparément la cle et le texte mais c un probleme mineur

Reply

Marsh Posté le 13-12-2003 à 18:11:21    

ignoble
1) tu ne tiens pas compte des remarque précédente -> main(void) :pfff:
2) ton programme fais plusieurs erreurs de segmentation :o

Reply

Marsh Posté le 13-12-2003 à 18:14:04    

Taz a écrit :

ignoble
1) tu ne tiens pas compte des remarque précédente -> main(void) :pfff:
2) ton programme fais plusieurs erreurs de segmentation :o


je cherche pas un resultat pro
tant que ca fonctionne ca me va (a la base j'y connais rien et je sais meme pas ce qu'est une erreur de segmentation  :na: )

Reply

Marsh Posté le 13-12-2003 à 18:15:33    

Mister_K a écrit :


je cherche pas un resultat pro
tant que ca fonctionne ca me va (a la base j'y connais rien et je sais meme pas ce qu'est une erreur de segmentation  :na: )

mais ça fonctionne pas ta merde :o

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed