Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/03/2013, à 22:01

G.I.Bdeking

Un probleme de code(age)...

Bonjours à tous et à toutes! après que mon long message édité avec amour aie été détruit par ce site qui a oublié que j'était connecté, je vous reexpose mon problème (désolé d’écourter les présentation, mais l'effacement de mon message m'a un peu refroidis):
Je m'amuse(plus ou moins tongue) actuellement un programme de cryptage-décryptage en C++ sous Ubuntu+LXDE avec code::block+GCC.
Il y a actuellement deux petites fonctions, l'une qui crypte, qui fonctionne à merveille, tenez par exemple elle vous transformera grrr en un truc comme:

[def du mot de passe] 4
01845749204854
56382035849345
23875938290190
00927489392819

Mais la fonction de décryptage du code:

#ifndef TCRACK1_HPP_INCLUDED
#define TCRACK1_HPP_INCLUDED

#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
#include "asimplefunctiontoconvertchartointinaverybizzarousandtolongnameoffile.hpp"
#include <cmath>

using namespace std;

bool Tcrack1(string definition)
{
    ifstream fichier("passwords");  //Ouverture d'un fichier en lecture

    if(fichier)
    {
      int longueur,c;
      bool trouve=false;
      string ligne;

      while(fichier.eof()||!trouve) //Tant qu'on n'est pas à la fin ou qu'on a pas trouvé le mot de passe, on lit
      {
         fichier>>ligne;
         if (ligne == definition)
             trouve=true;
      }
      if (trouve==false)
          return false;

      fichier>>longueur;

      int caracteres[longueur], crackedCaracter[longueur][3];
      int codesSecures, codesSecures1, nombredivision, password[longueur];
      char character[longueur];

      cout<<ligne;
      cout<<": ";
      c=0;
      do
      {
          fichier>>caracteres[c];

//cette partie du code que je ne vous montre pas (pour des raisons évidentes) décode le mot de passe et converti la suite de chiffres illisibles (caracteres[c]) en char (character[c]) je suis presque sur que le problemme ne vient pas de la

          cout<<character[c];
      c++;
      }while(c>=Longueur)

    cout<<endl;

    }
    else
    {
        cout << "ERREUR: Impossible d'ouvrir le fichier passwords en lecture." << endl;
    }

    return true;
}

#endif // TCRACK1_HPP_INCLUDED

Quand definition fait un seul charactere, mon compilo m'insulte de cette sorte (jusque là, assez poliment):

[def du mot de passe]: (il devrait marquer le mot de passe ici)

Process returned 0 (0x0)     execution time: 1.598 s

Quand definition fait plusieurs charactere, alors:

floating point exeption (core dumped)

Process returned 136 (0x88)     execution time: 5.456 s

Remarquez le temps d'execution plus long...

J'espere qu'un programmeur doué pourra me trouvé mon erreur (qui, comme toutes les erreurs, est bete, car "Un ordinateur ne fait jamais que ce que l'on lui dit, si le résultat ne vous satisfait pas, c'est le code qui est à revoir, non le beau materiel qui est en cause")


cordialement, G.I.Bdeking.

Dernière modification par G.I.Bdeking (Le 22/03/2013, à 19:49)


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne

#2 Le 18/03/2013, à 22:30

lann

Re : Un probleme de code(age)...

Cette ligne me parait assez bizarre :

fichier>>longueur;

Et mettre du code dans les includes.

Hors ligne

#3 Le 18/03/2013, à 22:33

telliam

Re : Un probleme de code(age)...

ça fait un petit moment que j'ai pas fait de c++ mais si longueur est egale a 0 VraiLongueur va etre négatif et tu vas avoir une boucle qui va provoquer un ecrasement mémoire.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#4 Le 18/03/2013, à 22:40

Braun

Re : Un probleme de code(age)...

Bonsoir,
Serait-ce que inopinément ton décodage entraînerait une tentative de division par zéro?

Hors ligne

#5 Le 19/03/2013, à 22:24

G.I.Bdeking

Re : Un probleme de code(age)...

lann a écrit :

Cette ligne me parait assez bizarre :

fichier>>longueur;

Et mettre du code dans les includes.

C'est la méthode cuorante utilisé en C++ pour lire un mot dans un fichier


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne

#6 Le 19/03/2013, à 23:36

lann

Re : Un probleme de code(age)...

Oui mais c'est un

int longueur

Hors ligne

#7 Le 20/03/2013, à 01:01

telliam

Re : Un probleme de code(age)...

C'est effectivement correct. Et sinon le coup de la longueur a 0. Tu as vérifié ? Sinon tu px toujours ouvrir le core avec gdb


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#8 Le 20/03/2013, à 20:40

G.I.Bdeking

Re : Un probleme de code(age)...

Merci telliam! désormait avec tes suggestions j'obtiens dans tous les cas l'erreur que j'avais avant seulement quand je tapais plusieurs lettres... c'est un commencement...
Et braun je vais regarder.


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne

#9 Le 20/03/2013, à 21:29

Braun

Re : Un probleme de code(age)...

Bon, alors es-tu sûr de ne jamais lire de donnée après la fin du fichier, ce qui ne serait pas très moral?

Hors ligne

#10 Le 20/03/2013, à 22:31

telliam

Re : Un probleme de code(age)...

redonne nous ton code modifié stp


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#11 Le 22/03/2013, à 19:48

G.I.Bdeking

Re : Un probleme de code(age)...

telliam: je modifie constamment mon message du haut pour que vous ayez l'avancement de mon code
Braun: nouveau brobleme bizzare: désormais, quand mon mot de passe fait une lettre, ca me met floating point machin, puis quand il fait plusieurs lettres, à l'endroit ou il doit nous afficher le mot de passe, il me met un ? bizzare... Et je ne met jamais rien après la fin de lecture du fichier.

Dernière modification par G.I.Bdeking (Le 22/03/2013, à 20:12)


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne

#12 Le 22/03/2013, à 20:23

G.I.Bdeking

Re : Un probleme de code(age)...

à un moment la partie cachée de mon programme j'appelle cette methode:

int calcul(int nombre)
{
int j=0;
while(nombre>0)
{
nombre=nombre/10;
j=j+1;
}
return(j);
}

De cette façon:
nombredivision=calcul(caracteres[c])-7;

Serait-il possible qu'après nombredivision soit égal à zero?


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne

#13 Le 22/03/2013, à 21:14

pingouinux

Re : Un probleme de code(age)...

Bonsoir G.I.Bdeking,
Pour info, ta fonction calcul renvoie 0 si nombre est négatif ou nul.
Après

nombredivision=calcul(caracteres[c])-7;

nombredivision sera supérieur ou égal à -7

Hors ligne

#14 Le 22/03/2013, à 21:26

G.I.Bdeking

Re : Un probleme de code(age)...

J'ais trouvé le problème!!! en fait mon algorithme de codage générait des nombres trop grands qui n'entraient meme pas dans des unsigned long! j'ais donc simplifié l’algorithme et revisité le code de décodage, et maintenant,plus de dépassement mémoire, tout va bien!!! mes characteres sont enregistrés dans seulement 8 chiffres (par exemple 43926758)!
Merci à tous! je soumettrais peut être un jours mon projet dans le sujet dédie!

cordalement, votre humble serviteur (heu attend rêve pas trop quand même...:D), G.I.Bdeking


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne

#15 Le 22/03/2013, à 21:28

G.I.Bdeking

Re : Un probleme de code(age)...

pingouinux a écrit :

Bonsoir G.I.Bdeking,
Pour info, ta fonction calcul renvoie 0 si nombre est négatif ou nul.
Après

nombredivision=calcul(caracteres[c])-7;

nombredivision sera supérieur ou égal à -7

Oui mais il y a à peu près 0% de chances qu'un mot fasse 0 characteres! smile


"Le désir sincère d'aider est l'essence du logiciel libre. Trouvez y un poste où vous serez utiles, même si ce n'est que de répondre aux libristes sur des forum, et vous trouverez votre place dans ce nouveau monde."

Hors ligne