Génération de mots

Génération de mots - C++ - Programmation

Marsh Posté le 15-09-2010 à 15:49:08    

Bonjour,
 
Je dois générer tous les mots de la forme XXXXX où X est un caractère ascii compris entre 33 et 126. La solution la plus simple est de faire 5 for imbriqués (oh yeah) et de mettre le tout dans un vecteur (je m'en fou un peu de la mémoire utilisée par mon programme). Bon par contre, cinq for imbriqués c'est pas tip top.  
 
Donc la deuxième solution à laquelle j'ai pensée c'est de faire une méthode du type
 
string generationMotDePasse.generer(string ancien_mot_de_passe)
 
où le mot de passe renvoyé est le suivant après ancien_mot_de_passe. Donc l'avantage c'est que c'est plus élégant mais par contre, on perd en vitesse car on a un appel de fonction (je dois créer un programme qui permet de casser un code AES en bruteforce).
 
Quelqu'un a-t-il d'autres idées ?
 
merci,
 
oliparcol

Reply

Marsh Posté le 15-09-2010 à 15:49:08   

Reply

Marsh Posté le 15-09-2010 à 16:11:38    

Je ne saisis pas très bien pourquoi tu ne veux pas faire 5 boucles for imbriquées? Problème de lisibilité? Au pire tu peux le simuler avec une boucle while, et en le codant correctement, rendre tout ça très lisible...
 
Sinon je pense que la méthode utilisant une génération de mot de passe est une mauvaise idée car:
- Tu n'es pas sur de parcourir toutes les possibilités
- Je ne sais pas comment elle marche mais elle risque d'être beaucoup plus lente que les 5 for.
 
Je n'ai pas vraiment d'autre idées sinon...


---------------
sheep++
Reply

Marsh Posté le 15-09-2010 à 16:22:37    

h3bus a écrit :

Je ne saisis pas très bien pourquoi tu ne veux pas faire 5 boucles for imbriquées? Problème de lisibilité? Au pire tu peux le simuler avec une boucle while, et en le codant correctement, rendre tout ça très lisible...


 
parce que dès que je dépasse 3 boucles, je pense qu'il y a un problème dans l'implémentation
 

h3bus a écrit :


Sinon je pense que la méthode utilisant une génération de mot de passe est une mauvaise idée car:
- Tu n'es pas sur de parcourir toutes les possibilités
- Je ne sais pas comment elle marche mais elle risque d'être beaucoup plus lente que les 5 for.


 
pour la méthode, je pensais l'appeler de la classe qui tente chaque clé sur l'algo AES. je suis sûr de tester toutes les clés mais effectivement, ça va probablement être plus lent

Reply

Marsh Posté le 15-09-2010 à 16:25:43    

oliparcol a écrit :


parce que dès que je dépasse 3 boucles, je pense qu'il y a un problème dans l'implémentation


 
Et le while, en implémentant une sorte de propagation de retenue sur ta chaine de caractère et en ajoutant 1 au premier caractère?


---------------
sheep++
Reply

Marsh Posté le 15-09-2010 à 16:39:23    

ouai je vais surement faire un truc de ce genre...
 
le problème c'est que niveau modularité, c'est pas tip top, je vais voir si ya pas moyen de coder en dur le nombre de caractères du mot de passe...

Reply

Marsh Posté le 15-09-2010 à 16:55:55    

Juste pour compléter ma pensée, voilà à quoi je pensais:

Code :
  1. #define cMIN_CHAR_VALUE 33
  2. #define cMAX_CHAR_VALUE 126
  3. void generateNext(char* currentWord, unsigned int size)
  4. {
  5.     unsigned int    index;
  6.    
  7.     currentWord[0]++;
  8.    
  9.     for(index = 0; index < size  - 1; index++)
  10.     {
  11.         if(currentWord[index] > cMAX_CHAR_VALUE)
  12.         {
  13.             currentWord[index] = cMIN_CHAR_VALUE;
  14.             currentWord[index+1]++;
  15.         }
  16.         else
  17.         {
  18.             break;
  19.         }
  20.     }
  21. }


 
Tu dois pouvoir rendre un truc comme ça aussi modulaire que la génération basée sur AES...


---------------
sheep++
Reply

Marsh Posté le 15-09-2010 à 23:23:57    

Si ta fonction est inline, ça te pose aucun problème en terme de performance.
 
Le code d'h3bus compte en little-endian mais au delà des char*, c'est correct (à toi de voir si tes bornes sont < ou <=).

Reply

Marsh Posté le 15-09-2010 à 23:26:46    

Et si tu veux t'amuser parce que ton mot de passe a un longueur statique  tu déroules la boucle en template et/ou tes bornes sont statiques et tu mets ça en param template.

Reply

Marsh Posté le 20-09-2010 à 17:07:22    

merci pour l'aide, ça a bien fonctionné

Reply

Sujets relatifs:

Leave a Replay

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